Spring-jdbc-4.0.5.release: программно установить тайм-аут соединения с DriverManagerDataSource - PullRequest
0 голосов
/ 08 февраля 2019

Я заметил, что соединение SQL закрывается через 30 минут, поэтому я пытаюсь увеличить его до 60 минут.Ниже приведен мой класс конфигурации Spring Datasource для Sql server 2008, и я пытаюсь установить время ожидания соединения как ds.getConnectionProperties().put("socketTimeout", jdbcsocketTimeout);, но при запуске приложения я получаю ошибку Error creating bean with name 'entityManagerFactory'.

@Configuration
@EnableJpaRepositories
public class JpaConfiguration {

    @Value("${jdbc.driverClassName}")
    String jdbcDriverClassName;
    @Value("${jdbc.url}")
    String jdbcUrl;
    @Value("${jdbc.username}")
    String jdbcUsername;
    @Value("${jdbc.password}")
    String jdbcPassword;
    @Value("${jdbc.socketTimeout}")
    int jdbcsocketTimeout;

    @Bean
    public javax.sql.DataSource remoteDataSource() {
        DriverManagerDataSource ds = new DriverManagerDataSource(jdbcUrl, jdbcUsername, jdbcPassword);
        ds.setDriverClassName(jdbcDriverClassName);
        System.out.println("jdbcsocketTimeout "+jdbcsocketTimeout);
        //ds.getConnectionProperties().put("socketTimeout", jdbcsocketTimeout);
        return ds;
    }

    @Bean
    public Map<String, Object> jpaProperties() {
        Map<String, Object> props = new HashMap<String, Object>();      
        props.put("hibernate.dialect", SQLServer2008Dialect.class.getName());       
        return props;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();      
        hibernateJpaVendorAdapter.setGenerateDdl(false);
        hibernateJpaVendorAdapter.setDatabase(Database.SQL_SERVER);     
        return hibernateJpaVendorAdapter;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new JpaTransactionManager(localContainerEntityManagerFactoryBean().getObject());
    }

    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(this.remoteDataSource());
        lef.setPackagesToScan(getClass().getPackage().getName());
        lef.setJpaPropertyMap(this.jpaProperties());
        lef.setJpaVendorAdapter(this.jpaVendorAdapter());
        return lef;
    }
}

Может кто-нибудь помочь мне установить тайм-аут соединения в вышеприведенном классе?

...