如何为Elastic Beanstalk应用程序正确配置Spring数据源?

时间:2016-09-09 18:38:10

标签: spring-mvc tomcat spring-security elastic-beanstalk amazon-rds

我遇到了将Spring Security与MySql数据库支持的Elastic Beanstalk应用集成的问题。如果我部署我的应用程序,我能够正确登录一段时间,但最终我将开始收到登录错误,没有抛出异常,所以我无法获得有关该问题的任何有用信息。我也下载了日志,看不到任何有价值的东西。我可以看到日志显示访问公共页面的位置,尝试访问私有部分,返回登录页面,然后是loginError页面;但是,没有任何问题。

即使我无法通过浏览器登录,如果我从IDE运行应用程序以及在MySQL Workbench中查看数据库,我也可以登录。这告诉我问题是由于服务器上的某些持久状态。

我之前使用Spring Security的另一个Beanstalk应用程序遇到了类似的问题,并且可以通过设置应用程序属性来解决它,如下所示:

spring.datasource.test-on-borrow=true
spring.datasource.validation-query=SELECT 1

我使用的是比该应用程序更新版本的Spring,并且属性已更改为特定数据源,因此我尝试添加以下属性:

spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.validation-query=SELECT 1

当这不起作用时,我在此处根据类似问题的答案添加了另一个;现在属性是:

spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.test-while-idle=true
spring.datasource.tomcat.validation-query=SELECT 1

这似乎有效(可能是因为登录活动较少)但最终导致了相同的行为。

我调查了各种properties available,但在我花费大量时间随机设置和/或覆盖默认设置之前,我想看看是否有可靠的方法来解决这个问题。

如何配置我的数据源以避免长时间后出现登录错误?

2 个答案:

答案 0 :(得分:0)

这不是特定配置值的问题,而是这些配置所在的位置。 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <ul id="Demosss" class="flex-container"></ul> <button id="clickMe">Click Me</button>application.properties; Intellij)的默认位置适合部署为具有嵌入式Tomcat服务器的jar,但不能与提供的服务器进行战争。找不到/使用该文件,因此对文件的更改不会影响AWS提供的文件。

有很多方法可以解决这个问题;我选择在/resources中添加RDS配置bean:

SpringBootServletInitializer

答案 1 :(得分:0)

以下是适合我的设置。 来自Connection to Db dies after >4<24 in spring-boot jpa hibernate

dataSourceFactory.setMaxActive(10);
dataSourceFactory.setInitialSize(10);
dataSourceFactory.setMaxIdle(10);
dataSourceFactory.setMinIdle(1);
dataSourceFactory.setTestWhileIdle(true);
dataSourceFactory.setTestOnBorrow(true);
dataSourceFactory.setValidationQuery("SELECT 1 FROM DUAL");
dataSourceFactory.setValidationInterval(10000);
dataSourceFactory.setTimeBetweenEvictionRunsMillis(20000); 
dataSourceFactory.setMinEvictableIdleTimeMillis(60000);