Java 在spring boot中设置嵌入式tomcat属性,bean使用情况如何?
我已经阅读并将其包含在我的一个类中,但我不知道如何确保它应该被执行。我甚至试着在我的代码中运行这个函数,但我的web应用程序总是返回ERR\u CONNECTION\u RESETJava 在spring boot中设置嵌入式tomcat属性,bean使用情况如何?,java,tomcat,spring-boot,Java,Tomcat,Spring Boot,我已经阅读并将其包含在我的一个类中,但我不知道如何确保它应该被执行。我甚至试着在我的代码中运行这个函数,但我的web应用程序总是返回ERR\u CONNECTION\u RESET 我没有改变其他任何事情。有什么我遗漏的吗?我以前曾经面对过这个问题,并找到了这样的解决方案;在应用程序属性上设置这些参数: spring.datasource.test-on-borrow=true spring.datasource.test-while-idle=true spring.datasource.va
我没有改变其他任何事情。有什么我遗漏的吗?我以前曾经面对过这个问题,并找到了这样的解决方案;在应用程序属性上设置这些参数:
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.validation-query=SELECT 1
但是我的spring boot版本对我不起作用。然后,我检查了tomcat jdbc数据源工厂字段,注意到application.properties配置没有成功设置dataSourceFactory的字段
最后,我在应用程序初始化后设置了这些字段,解决了连接重置问题:
@Component
public class PoolConfiguration implements BeanPostProcessor {
@Value("${spring.datasource.test-on-borrow:true}")
private boolean isTestOnBorrow;
@Value("${spring.datasource.test-while-idle:true}")
private boolean isTestWhileIdle;
@Value("${spring.datasource.validation-query:SELECT 1}")
private String validationQuery;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof TomcatJdbcDataSourceFactory) {
TomcatJdbcDataSourceFactory tomcatJdbcDataSourceFactory = (TomcatJdbcDataSourceFactory) bean;
tomcatJdbcDataSourceFactory.setTestOnBorrow(isTestOnBorrow);
tomcatJdbcDataSourceFactory.setTestWhileIdle(isTestWhileIdle);
tomcatJdbcDataSourceFactory.setValidationQuery(validationQuery);
}
return bean;
}
}