Spring Boot的各种配置
Spring Boot的配置各种各样的备忘录
在使用Spring Boot开发应用程序并将其投入生产环境时,简要记录下配置等内容,以免忘记。
组成
-
- OpenJDK 1.8
-
- Spring Boot 1.3.3 (Embedded Tomcat8)
- MySQL 5.6
构建工具-Gradle
云计算服务中的应用服务器
亚马逊云计算(Amazon EC2)(亚马逊 Linux AMI)
使用Service启动Spring Boot。
想以往常的方式来启动应用程序,即使用java -jar application_name.jar命令。但是从Spring Boot 1.3开始,似乎实现了可以通过Service来启动的功能,所以我尝试使用该功能进行适配。
请点击以下链接查看详细信息:
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html#deployment-service
应对的事情
1. 更改build.gradle的配置。
bootRepackage {
executable = true
}
添加
※这可能是可选的。
我还没有验证即使没有它也可以正常启动。
使用Gradle的bootRepackage来创建一个JAR文件。
在执行应用程序的服务器上上传jar文件并创建符号链接。按照官方文档的说明,将SpringBoot应用程序转换为jar文件,并将其上传到应用程序服务器的某个位置,例如/var/app/something.jar。
在/etc/init.d/目录下创建一个符号链接
ln -s /var/app/something.jar /etc/init.d/something
请注意,如果没有正确地设置执行权限等等,它不会启动。
通过以下命令即可启动或停止应用程序:
启动:
/etc/init.d/something start
停止:
/etc/init.d/something stop
若想在启动应用程序时添加JVM参数、更改日志文件的输出位置或附加其他选项,可以在放置JAR文件的位置准备一个名为”jar名.conf”(例如:something.conf)的文件。这样在启动时会自动读取该文件。
例)
LOG_FOLDER=/var/log/xxxx/
JAVA_OPTS="-Xms512m"
使用Spring Boot + MySQL时连接断开。
有用户报告说应用程序在运行但无法搜索数据,经查看日志发现出现以下消息。
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
听说如果是在MySQL上运行的话,如果一段时间没有访问,它会自动断开连接。
已采取行动
我稍微查了一下,已经有类似情况的信息了,基本上可以按照那里的解决方案来处理。
参考信息:
http://stackoverflow.com/questions/22684807/spring-boot-jpa-configuring-auto-reconnect
在以下情况下,进行了一些更改:
除了spring.datasource.time-between-eviction-runs-millis=xxxxxx之外,
还添加了spring.datasource.min-evictable-idle-time-millis=xxxx作为参数。
这样一来,将针对达到 min-evictable-idle-time-millis 以上空闲的连接,每隔 time-between-eviction-runs-millis 时间进行监视。
将Elastic Cacahe集成到Spring Boot中。
由于在将会话信息永久化到Elastic Cache(memcached)时,无法通过属性来有效设置,所以只能通过JavaConfiguration来处理这部分内容。
应对这件事
我搜索了一下,发现了类似的信息,可以直接参考。
http://stackoverflow.com/questions/25788969/memcached-with-spring-boot
真的非常感谢Stack Overflow。
为使用Elastic Cache的应用程序的build.gradle文件中添加用于管理memcached的jar
https://github.com/magro/memcached-session-manager
-
- memcached-session-manager
- memcached-session-manager-tc8(Embedded Tomcat8で動いているので)
为了能够管理Memcached,需要添加Java配置。
@Bean
public EmbeddedServletContainerFactory tomcat() {
return new TomcatEmbeddedServletContainerFactory() {
@Override
protected void postProcessContext(Context context) {
MemcachedBackupSessionManager manager = new MemcachedBackupSessionManager();
manager.setMemcachedNodes("Elastic Cache Endpoint");
manager.setRequestUriIgnorePattern(".*\\.(ico|png|gif|jpg|css|js)$");
context.setManager(manager);
}
};
}