在spring boot,bean使用中设置嵌入式tomcat属性?

时间:2017-05-12 21:35:37

标签: java tomcat spring-boot

我已经阅读并完成了这个https://www.mkyong.com/spring-boot/spring-boot-configure-maxswallowsize-in-embedded-tomcat/,将它包含在我的一个类中,但我不知道如何确保它应该被执行。我甚至尝试在我的代码中运行该函数,但我不断将ERR_CONNECTION_RESET返回到我的Web应用程序。

我还没有改变其他任何事情。有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

我之前遇到过这个问题并找到这样的解决方案;在 application.properties

上设置这些参数
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.validation-query=SELECT 1

但是我的弹簧启动版本并没有对我有用。然后我检查了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;
    }
}