Java HikariCP在更新spring boot 1.x.x=>;后未配置数据源或添加postgres连接;2.x.x
我最近从spring boot starter 1.5.9.RELEASE(使用spring版本Java HikariCP在更新spring boot 1.x.x=>;后未配置数据源或添加postgres连接;2.x.x,java,spring,spring-boot,spring-batch,hikaricp,Java,Spring,Spring Boot,Spring Batch,Hikaricp,我最近从spring boot starter 1.5.9.RELEASE(使用spring版本4.3.13.RELEASE)=>2.2.4.RELEASE更新了我的spring boot/spring批处理应用程序(使用spring版本5.2.3.RELEASE。1.5.9.RELEASE使用的是Hikari 2.6.3;我在迁移/更新的2.2.4.RELEASE版本中也尝试过这个版本。2.2.4.RELEASE使用的是Hikari 3.4.2.2,两者似乎都不起作用。我使用的是postgre
4.3.13.RELEASE
)=>2.2.4.RELEASE更新了我的spring boot/spring批处理应用程序(使用spring版本5.2.3.RELEASE
。1.5.9.RELEASE使用的是Hikari 2.6.3
;我在迁移/更新的2.2.4.RELEASE
版本中也尝试过这个版本。2.2.4.RELEASE
使用的是Hikari 3.4.2.2
,两者似乎都不起作用。我使用的是postgresql 42.2.9
这是Hikari在运行时登录我的控制台的方式(运行我的应用程序的1.5.9.RELEASE
spring boot版本时):
正如您所看到的,它是不同的。通常我不关心日志,但是当调用我的JpaRepository
方法时,比如.saveAll()
,应用程序挂起/停止执行任何操作,并且从未写入数据库。起初,我感到困惑,并认为这是我在Spring batch中设置的事务/实体管理器,但正如我之前所说,我所有的代码/配置实际上都工作得很好(写入数据库)在1.5.9.RELEASE
spring boot.现在,我刚刚在日志中发现了这个数据库配置,我99%确定我的数据库连接甚至没有正确初始化
这是我的应用程序yaml(这是一个代码片段,但包含与数据库连接相关的所有信息):
以及我对数据库配置的定义,DatabaseConfiguration.java:
@Configuration
@EnableTransactionManagement
public class DatabaseConfiguration {
@Autowired
private Environment envVar;
@Autowired
private KeyVault keyProvider;
@Bean(name = "dataSource")
@ConfigurationProperties(
prefix = "spring.datasource.hikari"
)
public DataSource dataSource(DataSourceProperties dataSourceProperties) {
log.debug("Configuring Datasource");
String dbPassword = keyProvider.getKeyProvider(dataSourceProperties.getPassword());
return DataSourceBuilder
.create(dataSourceProperties.getClassLoader())
.type(HikariDataSource.class)
.driverClassName(dataSourceProperties.getDriverClassName())
.url(dataSourceProperties.getUrl())
.username(dataSourceProperties.getUsername())
.password(dbPassword)
.build();
}
}
我在Spring BatchJobRepository
中使用这个@Autowiring
数据源,它是在我的BatchConfiguration.java类中定义的
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
// Autowiring of the JobBuilderFactory, StepBuilderFactory here
@Bean
public JobRepository jobRepository(PlatformTransactionManager transactionManager, @Qualifier("dataSource") DataSource dataSource) throws Exception {
JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
jobRepositoryFactoryBean.setDataSource(dataSource); // dataSource
jobRepositoryFactoryBean.setTransactionManager(transactionManager);
jobRepositoryFactoryBean.setDatabaseType("POSTGRES");
return jobRepositoryFactoryBean.getObject();
// more business logic code here
}
这是您在24小时内第四次以不同的形式提出相同的问题。请不要这样做。我强烈建议您阅读for和您使用的不同框架,而不是以不同的形式提出所有这些问题。您正在跳转3到5个主要版本,事情已经发生了很大的变化。因此,请阅读这些指南一次又一次地问同样的问题。我帮助了几十个人,但是当我询问更多信息时,我确实想要一个答案。而不是人们用同样的问题开始一个新问题,没有额外的信息。但是,唉。我知道你问了同样的问题,但你仍然遇到升级问题,这些问题与更新的版本,不同的属性,而您只是没有阅读升级指南。@M.Deinum我不知道该指南,您也没有在我以前的任何帖子中发布。我现在正在阅读它,感谢您对M.Deinum所说的+1。我也得出了相同的结论:。像这样的大爆炸迁移是不推荐的。您需要迁移一个主要的一次升级一个版本,每次都阅读迁移指南。@M.Deinum我可以尝试每个版本,发现2.2.0可以工作,但是->2.2.1失败。我可以手动升级到spring batch core 4.2.3.RELEASE(2.2.0使用spring batch core 4.2.0.RELEASE)但我必须更新jackson databind,或者它做了与我的第一个JpaRepositor方法调用相同的事情。saveAll()没有将任何数据持久化到postgres db,应用程序正在运行,只是挂起/粘住(在调试时,看起来它在Spring AOP/TX类中跳入无限循环,我看到事务中有奇怪的东西).这里的逻辑步骤是什么?想找到解决方案吗
spring:
application:
name: My Super Cool App
profiles:
active: "myLocal,myLocalDev"
batch.job.enabled: false
datasource:
hikari:
maximumPoolSize: 5
connectionTimeout: 60000
max-lifetime: 20000
auto-commit: false
jpa:
database: POSTGRESQL
database-platform: org.hibernate.dialect.PostgreSQL82Dialect
show-sql: false
hibernate:
ddl-auto: none
properties:
hibernate:
jdbc.batch_size: 5000
order_inserts: true
flushMode: COMMIT
---
spring:
profiles: myLocal
datasource:
url: jdbc:postgresql://database-main-url.mywebsite.com:5432/cooldbname
username: mysuperkewluser
password: hahasupersecretpw
@Configuration
@EnableTransactionManagement
public class DatabaseConfiguration {
@Autowired
private Environment envVar;
@Autowired
private KeyVault keyProvider;
@Bean(name = "dataSource")
@ConfigurationProperties(
prefix = "spring.datasource.hikari"
)
public DataSource dataSource(DataSourceProperties dataSourceProperties) {
log.debug("Configuring Datasource");
String dbPassword = keyProvider.getKeyProvider(dataSourceProperties.getPassword());
return DataSourceBuilder
.create(dataSourceProperties.getClassLoader())
.type(HikariDataSource.class)
.driverClassName(dataSourceProperties.getDriverClassName())
.url(dataSourceProperties.getUrl())
.username(dataSourceProperties.getUsername())
.password(dbPassword)
.build();
}
}
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
// Autowiring of the JobBuilderFactory, StepBuilderFactory here
@Bean
public JobRepository jobRepository(PlatformTransactionManager transactionManager, @Qualifier("dataSource") DataSource dataSource) throws Exception {
JobRepositoryFactoryBean jobRepositoryFactoryBean = new JobRepositoryFactoryBean();
jobRepositoryFactoryBean.setDataSource(dataSource); // dataSource
jobRepositoryFactoryBean.setTransactionManager(transactionManager);
jobRepositoryFactoryBean.setDatabaseType("POSTGRES");
return jobRepositoryFactoryBean.getObject();
// more business logic code here
}