我的HibernateConfiguration类:
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:core.properties" })
@ComponentScan({ "com.test.core.domain" })
@EnableJpaRepositories(basePackages = "com.test.core.domain.dao")
public class HibernateConfiguration {
private static Logger logger = Logger.getLogger(HibernateConfiguration.class);
@Autowired private Environment env;
@Bean
public LocalSessionFactoryBean entityManagerFactory() {
LocalSessionFactoryBean localSessionFactoryBean = new LocalSessionFactoryBean();
localSessionFactoryBean.setDataSource(dataSource());
localSessionFactoryBean.setPackagesToScan(new String[] { "com.test.core.domain.*" });
localSessionFactoryBean.setHibernateProperties(additionalProperties());
return localSessionFactoryBean;
}
@Bean
public DataSource dataSource() {
ComboPooledDataSource сomboPooledDataSource = new ComboPooledDataSource();
try {
сomboPooledDataSource.setDriverClass(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
} catch( PropertyVetoException pve ){
logger.error("Cannot load datasource driver (" + env.getProperty("jdbc.driverClassName") +"): " + pve.getMessage());
return null;
}
сomboPooledDataSource.setJdbcUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url")));
сomboPooledDataSource.setUser(Preconditions.checkNotNull(env.getProperty("edrive.jdbc.user")));
сomboPooledDataSource.setPassword(Preconditions.checkNotNull(env.getProperty("edrive.jdbc.pass")));
сomboPooledDataSource.setMinPoolSize(20);
сomboPooledDataSource.setMaxPoolSize(50);
сomboPooledDataSource.setCheckoutTimeout(15);
сomboPooledDataSource.setMaxStatements(0);
сomboPooledDataSource.setIdleConnectionTestPeriod(30);
return сomboPooledDataSource;
}
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
private Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL95Dialect");
properties.setProperty("hibernate.bytecode.use_reflection_optimizer", "true");
properties.setProperty("hibernate.show_sql", "false");
properties.setProperty("hibernate.default_batch_fetch_size", "1000");
properties.setProperty("hibernate.max_fetch_depth", "2");
properties.setProperty("hibernate.generate_statistics", "false");
properties.setProperty("hibernate.default_schema", "EDRIVE");
properties.setProperty("hibernate.connection.CharSet", "utf8");
properties.setProperty("hibernate.connection.characterEncoding", "utf8");
properties.setProperty("hibernate.connection.useUnicode", "true");
properties.setProperty("hibernate.connection.provider_class", "org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider");
properties.setProperty("hibernate.connection.release_mode", "after_transaction");
properties.setProperty("hibernate.jdbc.batch_size", "50");
properties.setProperty("hibernate.jdbc.fetch_size", "500");
properties.setProperty("hibernate.jdbc.use_scrollable_resultset", "false");
properties.setProperty("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory");
properties.setProperty("hibernate.cache.use_query_cache", "true");
properties.setProperty("hibernate.cache.use_second_level_cache", "true");
properties.setProperty("hibernate.cache.use_structured_entries", "false");
properties.setProperty("hibernate.current_session_context_class", "thread");
return properties;
}
}
属性文件:
jdbc.driverClassName=org.postgresql.Driver
jdbc.url=jdbc:postgresql://www:5434/edrived1
edrive.jdbc.user=services
edrive.jdbc.pass=*********
当我启动我的网络应用程序时,我在日志中收到以下消息和异常:
2018-03-17 13:59:34 INFO C3P0ConnectionProvider:117 - HHH010002:C3P0 在URL上使用driver:null:null 2018-03-17 13:59:34 INFO C3P0ConnectionProvider:118 - HHH10001001:连接属性: {useUnicode = true,handling_mode = DELAYED_ACQUISITION_AND_HOLD, CharSet = utf8,characterEncoding = utf8,release_mode = after_transaction} 2018-03-17 13:59:34 INFO C3P0ConnectionProvider:121 - HHH10001003: 自动提交模式:假2018-03-17 13:59:34警告 C3P0ConnectionProvider:124 - HHH10001006:没有JDBC驱动程序类 由属性hibernate.connection.driver_class
指定
...
2018-03-17 13:59:34 DEBUG BasicResourcePool:207 - 一个例外 在获得可用资源时发生了将重试。 java.sql.SQLException:没有合适的驱动程序 java.sql.DriverManager.getDriver(DriverManager.java:315)at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285) 在 com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:161) 在 com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161) 在 com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:147) 在 com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool $ 1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:202) 在 com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138) 在 com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125) 在 com.mchange.v2.resourcepool.BasicResourcePool.access $ 700(BasicResourcePool.java:44)at at com.mchange.v2.resourcepool.BasicResourcePool $ ScatteredAcquireTask.run(BasicResourcePool.java:1870) 在 com.mchange.v2.async.ThreadPoolAsynchronousRunner $ PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
这是bean的配置日志:
2018-03-17 14:09:50 DEBUG PropertySourcesPropertyResolver:115 - 找到 key' jdbc.driverClassName'在PropertySource'类路径资源中 [core.properties]'值类型为String 2018-03-17 14:09:50 DEBUG JndiTemplate:154 - 用名字查找JNDI对象 [java:comp / env / jdbc.url] 2018-03-17 14:09:50 DEBUG JndiLocatorDelegate:102 - 转换的JNDI名称[java:comp / env / jdbc.url] 找不到 - 尝试原始名称[jdbc.url]。 javax.naming.NameNotFoundException:名称[jdbc.url]未绑定 这个背景。无法找到[jdbc.url]。 2018-03-17 14:09:50 DEBUG JndiTemplate:154 - 查找名称为[jdbc.url]的JNDI对象 2018-03-17 14:09:50 DEBUG JndiPropertySource:101 - JNDI查找 name [jdbc.url]使用消息抛出NamingException:Name [jdbc.url] is 不受此上下文约束。无法找到[jdbc.url] ..返回null。 2018-03-17 14:09:50 DEBUG PropertySourcesPropertyResolver:115 - 发现 key' jdbc.url'在PropertySource'类路径资源中 [core.properties]'值类型为String 2018-03-17 14:09:50 DEBUG JndiTemplate:154 - 用名字查找JNDI对象 [java:comp / env / edrive.jdbc.user] 2018-03-17 14:09:50 DEBUG JndiLocatorDelegate:102 - 转换的JNDI名称 找不到[java:comp / env / edrive.jdbc.user] - 尝试原始名称 [edrive.jdbc.user]。 javax.naming.NameNotFoundException:名称 [edrive.jdbc.user]未绑定在此Context中。无法找到 [edrive.jdbc.user]。 2018-03-17 14:09:50 DEBUG JndiTemplate:154 - 查找名称为[edrive.jdbc.user] 2018-03-17的JNDI对象 14:09:50 DEBUG JndiPropertySource:101 - JNDI查找名称 [edrive.jdbc.user]使用消息:Name抛出NamingException [edrive.jdbc.user]未绑定在此Context中。无法找到 [edrive.jdbc.user] ..返回null。 2018-03-17 14:09:50 DEBUG PropertySourcesPropertyResolver:115 - 找到关键' edrive.jdbc.user'在 PropertySource'类路径资源[core.properties]'价值 type String 2018-03-17 14:09:50 DEBUG JndiTemplate:154 - 向上看 名称为[java:comp / env / edrive.jdbc.pass]的JNDI对象2018-03-17 14:09:50 DEBUG JndiLocatorDelegate:102 - 转换JNDI名称 找不到[java:comp / env / edrive.jdbc.pass] - 尝试原始名称 [edrive.jdbc.pass]。 javax.naming.NameNotFoundException:名称 [edrive.jdbc.pass]未绑定在此Context中。无法找到 [edrive.jdbc.pass]。 2018-03-17 14:09:50 DEBUG JndiTemplate:154 - 查找名称为[edrive.jdbc.pass]的JNDI对象2018-03-17 14:09:50 DEBUG JndiPropertySource:101 - JNDI查找名称 [edrive.jdbc.pass]使用消息:Name抛出NamingException [edrive.jdbc.pass]未绑定在此Context中。无法找到 [edrive.jdbc.pass] ..返回null。 2018-03-17 14:09:50 DEBUG PropertySourcesPropertyResolver:115 - 找到密钥' edrive.jdbc.pass'在 PropertySource'类路径资源[core.properties]'价值 type String 2018-03-17 14:09:50 DEBUG DefaultListableBeanFactory:573 - 急切地缓存bean&data;数据源'允许解决潜力 循环引用
所有属性都在相应的core.properties文件中设置,数据库处于活动状态,并且可以正常使用Hibernate 5.1和XML配置。现在我想迁移到Spring Boot 2,因此,我需要将配置转换为无XML的东西。我当前的实施出了什么问题?