将spring session JDBC与现有数据库一起使用(不是springboot)

问题描述 投票:3回答:2

我的应用程序在没有Spring Boot的情况下与Spring Web MVC框架一起运行。现在,我想使用spring session JDBC将会话存储到应用程序使用的数据库中。我在网上找到的所有示例都使用Spring Boot,如果不使用Spring Boot,则它们使用的数据源配置为EmbeddedDatabase,如下所示:

    @Bean
    public EmbeddedDatabase dataSource() {
            return new EmbeddedDatabaseBuilder() 
                            .setType(EmbeddedDatabaseType.H2)
                            .addScript("org/springframework/session/jdbc/schema-h2.sql").build();
    }

我具有使用HikariCP的数据源配置,并且我希望Spring会话使用此数据源配置。

@Bean
public DataSource dataSource() {
    HikariConfig config = new HikariConfig();
    config.setDriverClassName(env.getRequiredProperty("jdbc.driver"));
    config.setJdbcUrl(env.getRequiredProperty("jdbc.url"));
    config.setUsername(env.getRequiredProperty("jdbc.username"));
    config.setPassword(env.getRequiredProperty("jdbc.password"));
    config.setMinimumIdle(env.getRequiredProperty("jdbc.pool.minimumIdle", Integer.class));
    config.setMaximumPoolSize(env.getRequiredProperty("jdbc.pool.maximumPoolSize", Integer.class));
    config.addDataSourceProperty("cachePrepStmts", env.getRequiredProperty("jdbc.prop.cachePrepStmts"));
    config.addDataSourceProperty("prepStmtCacheSize", env.getRequiredProperty("jdbc.prop.prepStmtCacheSize"));
    config.addDataSourceProperty("prepStmtCacheSqlLimit", env.getRequiredProperty("jdbc.prop.prepStmtCacheSqlLimit"));
    HikariDataSource ds = new HikariDataSource(config);
    return ds;
}

如何使用当前配置与Spring Session集成?

spring spring-session spring-config
2个回答
1
投票

据我了解,spring-session javaconfig-jdbc sample / doc,您“只是”需要:

  1. YourConfig注释“您的配置类”(org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession)。

  2. [Name您的DataSource“数据源”。 (完成!;)

  3. 基于PlatformTransactionManager中的dataSource提供YourConfig bean。

  4. ((在servlet环境中-如您所愿)介绍一个引用AbstractHttpSessionApplicationInitializerYourConfig(在类路径中:)]

    public class Initializer extends org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer { // <1>
    
      public Initializer() {
        super(YourConfig.class); // <2>
      }
    }
    

  5. 如果希望安装

db模式手动或使用外部工具,则SQL脚本位于spring-session.jar(!org / springframework / session / jdbc / schema-@@ platform @@。sql)文件或分别in the source code repository

这些(应用程序)属性允许进一步自定义:

# Session store type. [jdbc|redis|hazelcast|mongodb]
spring.session.store-type=jdbc
# Session timeout. If a duration suffix is not specified, seconds will be used.
server.servlet.session.timeout= 
# Database schema initialization mode. [alwys | never | embedded]
spring.session.jdbc.initialize-schema=always 
# Path to the SQL file to use to initialize the database schema.(see: https://github.com/spring-projects/spring-session/tree/master/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc)
spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql
# custom spring session table name (see : https://github.com/spring-projects/spring-session/issues/1230) 
spring.session.jdbc.table-name=SPRING_SESSION

  • 在jar /源代码分发中,您还将找到“ cleanup”(-drop)脚本
  • 和当前提供的平台是:

db2
derby
h2
hsqldb
mysql
oracle
postgresql
sqlite
sqlserver
sybase

1
投票
@Autowired
    private Environment env;

@Bean
    public PlatformTransactionManager transactionManager () {

        EntityManagerFactory factory = entityManagerFactory();
        return new JpaTransactionManager(factory);
    }


@Bean
    public EntityManagerFactory entityManagerFactory () {
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setShowSql(Boolean.TRUE);
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("com.your.domain.project");
        factory.setDataSource(dataSource());
        factory.setJpaProperties(additionalProperties()); // any addtional properties of your ORM
        factory.afterPropertiesSet();
        factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
        return factory.getObject();
    }


@Bean
    public DataSource dataSource () {

        final com.mchange.v2.c3p0.ComboPooledDataSource comboDataSource = new ComboPooledDataSource();

        try {
            comboDataSource.setDriverClass(env.getProperty("jdbc.driver"));
            comboDataSource.setJdbcUrl(env.getProperty("jdbc.url"));
            comboDataSource.setUser(env.getProperty("jdbc.user"));
            comboDataSource.setPassword(env.getProperty("jdbc.properties"));

        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        return comboDataSource;
    }


© www.soinside.com 2019 - 2024. All rights reserved.