Использовать JDBC весенней сессии с существующей базой данных (не Springboot) - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть приложение, работающее с spring web mvc framework без весенней загрузки.Теперь я хочу использовать весенний сеанс JDBC для сохранения сеанса в базе данных, используемой приложением.Все примеры, которые я нашел в Интернете, используют весеннюю загрузку, и если не использовать весеннюю загрузку, они используют конфигурацию источника данных EmbeddedDatabase следующим образом:

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

У меня есть конфигурация источника данных с использованием HikariCP, и я хочувесенняя сессия для использования этой конфигурации источника данных.

@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;
}

Как я могу использовать мою текущую конфигурацию для интеграции с весенней сессией?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Как я понимаю образец javaconfig-jdbc весенней сессии / документ , вам "просто" нужно:

  1. Annotate "вашкласс конфигурации "(YourConfig) с org.springframework.session.jdbc.config.annotation.web.http.EnableJdbcHttpSession.

  2. Имя Ваш DataSource" источник данных ".(готово!;)

  3. Обеспечить бин PlatformTransactionManager, основанный на dataSource в YourConfig.

  4. (в сервлете)окружение - как ваше) Введите AbstractHttpSessionApplicationInitializer (в пути к классу) ссылки YourConfig:

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

Если вы хотите установить схема БД вручную или с помощью внешнего инструмента , сценарии SQL находятся в spring-session.jar (! Org / springframework / session / jdbc / schema - @@ platform @@.sql) файл или соответственно в хранилище исходного кода .


Эти (application.) свойства позволяют дальнейшую настройку:

# 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 / source вы также найдете сценарии «очистки» (-drop)
  • , и в настоящее время предоставляются следующие платформы:

    db2
    derby
    h2
    hsqldb
    mysql
    oracle
    postgresql
    sqlite
    sqlserver
    sybase
    
0 голосов
/ 01 февраля 2019
@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;
    }


Это определенно поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...