SpringBoot的配置项

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动。其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat)。当然你也可以将项目打包成war包,放到独立的web容器中(Tomcat、weblogic等等),当然在此之前你要对程序入口做简单调整。

项目构建我们使用Maven或Gradle,这将使项目依赖、jar包管理、以及打包部署变的非常方便。

一、内嵌 Server 配置

Spring Boot将容器内置后,它通过配置文件的方式类修改相关server配置。 
先看一下下面的图,为关于server的配置列项: 
配置 
配置

其中常用的配置只有少数几个,已经用紫色标记起来。红框圈起来的部分,看名称分类就可以明白其作用。 
对server的几个常用的配置做个简单说明:

# 项目contextPath,一般在正式发布版本中,我们不配置
server.context-path=/myspringboot
# 错误页,指定发生错误时,跳转的URL。请查看BasicErrorController源码便知
server.error.path=/error
# 服务端口
server.port=9090
# session最大超时时间(分钟),默认为30
server.session-timeout=60
# 该服务绑定IP地址,启动服务器时如本机不是该IP地址则抛出异常启动失败,只有特殊需求的情况下才配置
# server.address=192.168.16.11

Tomcat 
Tomcat为Spring Boot的默认容器,下面是几个常用配置:

# tomcat最大线程数,默认为200
server.tomcat.max-threads=800
# tomcat的URI编码
server.tomcat.uri-encoding=UTF-8
# 存放Tomcat的日志、Dump等文件的临时文件夹,默认为系统的tmp文件夹(如:C:\Users\Shanhy\AppData\Local\Temp)
server.tomcat.basedir=H:/springboot-tomcat-tmp
# 打开Tomcat的Access日志,并可以设置日志格式的方法:
#server.tomcat.access-log-enabled=true
#server.tomcat.access-log-pattern=
# accesslog目录,默认在basedir/logs
#server.tomcat.accesslog.directory=
# 日志文件目录
logging.path=H:/springboot-tomcat-tmp
# 日志文件名称,默认为spring.log
logging.file=myapp.log
  •  

Jetty 
如果你要选择Jetty,也非常简单,就是把pom中的tomcat依赖排除,并加入Jetty容器的依赖,如下:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>
<dependencies> 
  •  

打包 
打包方法: 
CMD进入项目目录,使用 mvn clean package 命令打包,以我的项目工程为例:

E:\spring-boot-sample>mvn clean package
  •  

可以追加参数 -Dmaven.test.skip=true 跳过测试。 
打包后的文件存放于项目下的target目录中,如:spring-boot-sample-0.0.1-SNAPSHOT.jar 
如果pom配置的是war包,则为spring-boot-sample-0.0.1-SNAPSHOT.war

二、部署到JavaEE容器

  1. 修改启动类,继承 SpringBootServletInitializer 并重写 configure 方法
public class SpringBootSampleApplication extends SpringBootServletInitializer{private static final Logger logger = LoggerFactory.getLogger(SpringBootSampleApplication.class);@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(this.getClass());}}
  •  
  1. 修改pom文件中jar 为 war
<!-- <packaging>jar</packaging> -->
<packaging>war</packaging>
  •  
  1. 修改pom,排除tomcat插件
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>
  1. 打包部署到容器 
    使用命令 mvn clean package 打包后,同一般J2EE项目一样部署到web容器。

三、使用Profile区分环境

spring boot 可以在 “配置文件”、“Java代码类”、“日志配置” 中来配置profile区分不同环境执行不同的结果

1、配置文件 
使用配置文件application.yml 和 application.properties 有所区别 
以application.properties 为例,通过文件名来区分环境 application-{profile}.properties 
application.properties

app.name=MyApp
server.port=8080
spring.profiles.active=dev
  •  

application-dev.properties

server.port=8081
  •  

application-stg.properties

server.port=8082
  •  

在启动程序的时候通过添加 –spring.profiles.active={profile} 来指定具体使用的配置 
例如我们执行 java -jar demo.jar –spring.profiles.active=dev 那么上面3个文件中的内容将被如何应用? 
Spring Boot 会先加载默认的配置文件,然后使用具体指定的profile中的配置去覆盖默认配置。

app.name 只存在于默认配置文件 application.properties 中,因为指定环境中不存在同样的配置,所以该值不会被覆盖 
server.port 默认为8080,但是我们指定了环境后,将会被覆盖。如果指定stg环境,server.port 则为 8082 
spring.profiles.active 默认指定dev环境,如果我们在运行时指定 –spring.profiles.active=stg 那么将应用stg环境,最终 server.port 的值为8082

2、Java类中@Profile注解 
下面2个不同的类实现了同一个接口,@Profile注解指定了具体环境

// 接口定义
public interface SendMessage {// 发送短信方法定义public void send();}// Dev 环境实现类
@Component
@Profile("dev")
public class DevSendMessage implements SendMessage {@Overridepublic void send() {System.out.println(">>>>>>>>Dev Send()<<<<<<<<");}}// Stg环境实现类
@Component
@Profile("stg")
public class StgSendMessage implements SendMessage {@Overridepublic void send() {System.out.println(">>>>>>>>Stg Send()<<<<<<<<");}}// 启动类
@SpringBootApplication
public class ProfiledemoApplication {@Value("${app.name}")private String name;@Autowiredprivate SendMessage sendMessage;@PostConstructpublic void init(){sendMessage.send();// 会根据profile指定的环境实例化对应的类}}
  •  

3、logback-spring.xml也支持有节点来支持区分

<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/base.xml" /><logger name="org.springframework.web" level="INFO"/><springProfile name="default"><logger name="org.springboot.sample" level="TRACE" /></springProfile><springProfile name="dev"><logger name="org.springboot.sample" level="DEBUG" /></springProfile><springProfile name="staging"><logger name="org.springboot.sample" level="INFO" /></springProfile></configuration>
  •  

再说一遍文件名不要用logback.xml 请使用logback-spring.xml

四、指定外部的配置文件

有些系统,关于一些数据库或其他第三方账户等信息,由于安全问题,其配置并不会提前配置在项目中暴露给开发人员。 
对于这种情况,我们在运行程序的时候,可以通过参数指定一个外部配置文件。 
以 demo.jar 为例,方法如下:

java -jar demo.jar --spring.config.location=/opt/config/application.properties
  •  

其中文件名随便定义,无固定要求。

五、创建一个Linux 应用的sh脚本

下面几个脚本仅供参考,请根据自己需要做调整 
start.sh

#!/bin/shrm -f tpidnohup java -jar myapp.jar --spring.config.location=application.yml > /dev/null 2>&1 &echo $! > tpidecho Start Success!
  •  

stop.sh

#!/bin/sh
APP_NAME=myapptpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Stop Process...'kill -15 $tpid
fi
sleep 5
tpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Kill Process!'kill -9 $tpid
elseecho 'Stop Success!'
fi
  •  

check.sh

#!/bin/sh
APP_NAME=myapptpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'App is running.'
elseecho 'App is NOT running.'
fi
  •  

kill.sh

#!/bin/sh
APP_NAME=myapptpid=`ps -ef|grep $APP_NAME|grep -v grep|grep -v kill|awk '{print $2}'`
if [ ${tpid} ]; thenecho 'Kill Process!'kill -9 $tpid
fi
  •  

六、使用Linux服务的方式启动、停止、重启

1、首先在 pom.xml 中配置插件

    <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable></configuration></plugin></plugins></build>
  •  

特别注意一下 <executable>true</executable>

2、然后正常使用 mvn clean package -Dmaven.test.skip=true 将工程打成jar包

3、上传jar包到服务器,假设部署路径为 /var/apps/myapp.jar ,使用命令做一个软连接到 /etc/init.d 目录,命令:

ln -s /var/apps/myapp.jar /etc/init.d/myapp
  • 1
  • 1

其中 /etc/init.d/myapp 最后的 myapp 可以是别的名字,这个就是服务名,我们后面使用 service [服务名] start 来启动(下面有说明)。

4、给jar文件授予可执行权限,命令:

chmod +x myapp.jar
  •  

5、接下来,就可以使用我们熟悉的 service myapp start|stop|restart|status 来对应用进行启停了。 
执行命令后将得到形如 Started|Stopped [PID] 的结果反馈。 
默认PID文件路径:/var/run/appname/appname.pid 
默认服务日志文件路径:/var/log/appname.log(可以通过下面.conf 的方式修改LOG_FOLDER

6、使用自定义的.conf文件来变更默认配置,方法如下: 
在jar包相同路径下创建一个.conf文件,名称应该与.jar的名称相同,如myapp.conf(如果我们打包的文jar文件为 myapp-1.0.0.jar 那么这里的conf文件也应该是 myapp-1.0.0.conf),其内容配置可以如下:

JAVA_HOME=/usr/local/jdk
JAVA_OPTS=-Xmx1024M
LOG_FOLDER=/data/logs/myapp
  •  

注:LOG_FOLDER 对应的文件夹目录要必须存在,如果目录不存在,服务并不会自从创建目录。

(结束)

转载于:https://my.oschina.net/qiangzigege/blog/904253

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北大OJ百练——4075:矩阵旋转(C语言)

百练的这道题很简单&#xff0c;通过率也达到了86%&#xff0c;所以我也就来贴个代码了。。。下面是题目&#xff1a; 不过还是说一下我的思路&#xff1a; 这道题对一个新来说&#xff0c;可能是会和矩阵的转置相混淆&#xff0c;这题并不是要我们去求矩阵的转置。 这题&#…

编译py-faster-rcnn全过程

编译py-faster-rcnn&#xff0c;花费了好几天&#xff0c;中间遇到好多问题&#xff0c;今天终于成功编译。下面详述我的整个编译过程。 【注记&#xff1a;】其实下面的依赖库可以安装在统一的一个本地目录下&#xff0c;相关安装指南&#xff0c;可以参考《深度学习&#xf…

不是世界不好,而是你见得太少

转载于:https://www.cnblogs.com/yymn/p/4590333.html

用Heartbeat实现web服务器高可用

用Heartbeat实现web服务器高可用heartbeat概述: Heartbeat 项目是 Linux-HA 工程的一个组成部分&#xff0c;它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件&#xff0c;在 Heartbeat 项目里&#xff0c;由 heartbeat 模块实现了这两个功能。端口号…

scp创建远程目录_在Linux系统中使用Vim读写远程文件

大家好&#xff0c;我是良许。 今天我们讨论一个 Vim 使用技巧——用 Vim 读写远程文件。要实现这个目的&#xff0c;我们需要使用到一个叫 netrw.vim 的插件。从 Vim 7.x 开始&#xff0c;netrw.vim 就被设置为默认安装的标准插件了。这个插件允许用户通过 ftp、rcp、scp、htt…

softmax logistic loss详解

softmax函数–softmax layer softmax用于多分类过程中&#xff0c;它将多个神经元的输出&#xff0c;映射到&#xff08;0,1&#xff09;区间内&#xff0c;可以看成概率来理解&#xff0c;从而来进行多分类&#xff01; 假设我们有一个数组z(z1,z2,...zm),则其softmax函数定…

javascript做极简时钟特效,再简单没思路你也做不出来

点击查看时钟特效极简主义&#xff0c;程序员javascript打造极简时钟特效对于javascript特效的学习&#xff0c;重要的是逻辑思路&#xff0c;所以这个时钟特效不是很华丽&#xff0c;但是功能都展现出来了&#xff0c;而学习javascript并不是单纯的扣代码&#xff0c;很多人都…

图像极坐标变换及在OCR中的应用

极坐标变换定义 我们知道在二维坐标系中&#xff0c;有直角坐标系&#xff0c;也有极坐标系&#xff0c;二者的转换关系是&#xff1a; 如下图&#xff1a; 如图&#xff0c;直角坐标系的圆心与极坐标系的圆心一一对应&#xff0c;且圆弧BA可以通过极坐标变换到极坐标系ρr的…

bootstrap-表单控件——单选按钮水平排列

1.运行效果如图所示2.实现代码如下<!DOCTYPE html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>表单控件——单选按钮水平排列</title><!-- 最…

MongoDB使用小结:一些常用操作分享

MongoDB使用小结&#xff1a;一些常用操作分享 本文整理了一年多以来我常用的MongoDB操作&#xff0c;涉及mongo-shell、pymongo&#xff0c;既有运维层面也有应用层面&#xff0c;内容有浅有深&#xff0c;这也就是我从零到熟练的历程。 MongoDB的使用之前也分享过一篇&#x…

【论文阅读】Illuminating Pedestrians via Simultaneous Detection Segmentation

论文来源 ICCV2017arXiv reportgithub代码(caffe-matlab) 本文的主要问题是行人检测。作者探讨了如何将语义分割应用在行人检测上&#xff0c;提高检测率&#xff0c;同时也不损坏检测效率。作者提出了一种语义融合网络&#xff08;segmentation infusion networks&#xff0…

Python ORM框架之 Peewee入门

之前在学Django时&#xff0c;发现它的模型层非常好用&#xff0c;把对数据库的操作映射成对类、对象的操作&#xff0c;避免了我们直接写在Web项目中SQL语句&#xff0c;当时想&#xff0c;如果这个模型层可以独立出来使用就好了&#xff0c;那我们平台操作数据库也可以这么玩…

天联高级版客户端_金万维天联高级版服务器安装配置全流程以及客户端登录流程...

今天下午&#xff0c;有一个使用千江软件的用户&#xff0c;他想实现千江软件的异地访问&#xff0c;经过他朋友也是金万维天联高级版的客户的介绍&#xff0c;推荐我们帮他安装天联高级版&#xff0c;从而实现千江软件的异地访问&#xff0c;千江软件本地访问界面如下&#xf…

[C#]async和await刨根问底

上一篇随笔留下了几个问题没能解决&#xff1a; 调用IAsyncStateMachine.MoveNext方法的线程何时发起的&#xff1f; lambda的执行为何先于MoveNext方法&#xff1f; 后执行的MoveNext方法做了些什么事情&#xff1f; 那么今天就来尝试解决它们吧~PS: 本文中部分代码来自上一篇…

Spring中Bean的定义继承

以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-definition-inheritance.html&#xff1a; Bean定义继承 bean定义可以包含很多的配置信息&#xff0c;包括构造函数的参数&#xff0c;属性值&#xff0c;容器的具体信息例如初始化方法&#xff0c;静态工厂方法…

由Google Protocol Buffer的小例子引起的g++编译问题

问题 学习 Google Protocol Buffer 的使用和原理时&#xff0c;提供了一个小例子&#xff0c;讲述了protobuf的使用方法。 假如已经有了如下文件&#xff1a; 其中writer.cpp如下&#xff1a;#include "lm.helloworld.pb.h" #include<iostream> #include<…

UVALive 5903 Piece it together(二分图匹配)

给你一个n*m的矩阵&#xff0c;每个点为B或W或.。然后你有一种碎片。碎片可以旋转&#xff0c;问可否用这种碎片精确覆盖矩阵。N,M<500 WB 《碎片 W 题目一看&#xff0c;感觉是精确覆盖&#xff08;最近被覆盖洗脑了&#xff09;&#xff0c;但是仔细分析可以知道&#xf…

springcloud(五):熔断监控Hystrix Dashboard和Turbine

Hystrix-dashboard是一款针对Hystrix进行实时监控的工具&#xff0c;通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。但是只使用Hystrix Dashboard的话, 你只能看到单个应用内的服务信息, 这明显不够. 我们需要一个工具能让我们…

位运算问题

位运算 位运算是把数字用二进制表示之后&#xff0c;对每一位上0或者1的运算。 理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。在程序员的圈子里有一个流传了很久的笑话&#xff0c;说世界上有10种人&#xff0c;一…

conda环境管理介绍

我们可以使用conda 来切换不同的环境&#xff0c;主要的用法如下&#xff1a; 1. 创建环境 # 指定python版本为2.7&#xff0c;注意至少需要指定python版本或者要安装的包 # 后一种情况下&#xff0c;自动安装最新python版本conda create -n env_name python2.7# 同时安装必…