Java 在spring boot中设置嵌入式tomcat属性,bean使用情况如何?

Java 在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

我已经阅读并将其包含在我的一个类中,但我不知道如何确保它应该被执行。我甚至试着在我的代码中运行这个函数,但我的web应用程序总是返回ERR\u CONNECTION\u RESET


我没有改变其他任何事情。有什么我遗漏的吗?

我以前曾经面对过这个问题,并找到了这样的解决方案;在应用程序属性上设置这些参数:

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