spring-boot 操作手冊

spring-boot 操作手冊

1、spring-boot配置文件

spring-boot會按順序讀取以下目錄的application.properties
1、項目根目錄的config目錄
2、項目根目錄
3、項目classpath下的config目錄
4、項目classpath根目錄

2、指定配置文件位置

如果想自己指定配置文件,可以在spring容器的啓動命令中加入參數
new SpringApplicationBuilder(Application.class).properties("spring.config.location=classpath:/test-folder/my-config.properties").run(args);

3、yml文件

注意:使用yml配置文件的縮進要使用空格,不要使用tab鍵進行縮進。

4、允許時指定profiles配置

定義多個不同的profiles,yml的profiles可以用---(只適合yml配置文件)進行分割,properties配置文件需要編寫多份區分,(-dev.properties、-test.properties等)在spring容器啓動時,使用spring.profiles.active來指定激活那個profiles。

5、Profiles實現多環境下配置切換

創建application-{profile}.properties文件 存放不同環境特有的配置,將於環境無關的屬性放置到application.properties文件裏面,
並在application.properties文件中通過spring.profiles.active=xxx 指定加載不同環境的配置。
如果不指定,則默認加載application.properties的配置,不會加載帶有profile的配置。
server.port=8081
#配置項目啓動的時候,決定使用哪個環境,開發(dev)、測試(test)還是產品(prod)環境
spring.profiles.active=dev
創建配置文件:application-dev.properties application-test.properties application-prod.properties

6、熱部署

不用每次修改java文件後,都需要重寫允許main方法才能生效。
添加依賴
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
</dependency>
坑:我在實際開發中配置之後沒有效果,原因是idea默認是沒有自動編譯的,我們這裏需要添加修改配置
1、File-Settings-Compiler-> Build Project automatically  打勾
2、mac:shift+alt+command+/   選擇Registry,勾上 Compiler autoMake allow when app running
   windows:ctrl + shift + alt + /

7、自定義 Filter

見  com.hyperchain.filter.WebConfiguration 中的代碼

8、將SpringBoot配置文件中數據加載到實體類中

@Configuration
@PropertySource(value=”classpath:application.yml”)
指明瞭配置文件所處的位置,classpath 下的 application.yml。
@ConfigurationProperties(prefix=”com.springboot”)
注:實體類對應的屬性名要與配置文件中的屬性保持一致,並且要加上 setter 和 getter 方法。
這樣在項目啓動的時候,SpringBoot 就會去加載對應配置文件中的屬性,反射創建一個 bean 對象,
並放入 Spring 的容器(ConcurrentHashMap)中,在需要使用的地方用 @Autowired 屬性注入。

9、springBoot日誌

只要在application.properties 中加入logging.level.xxxx=DEBUG就可以了。其中xxxx是你想監聽的包路徑,logging.level 後面可以根據包路徑配置不同資源的 log 級別
logging.path=/Users/lixuanfeng/Desktop/workspace/spring_boot/logs
logging.level.org.springframework.web=INFO
參考博客:https://blog.csdn.net/weixin_41660188/article/details/80113837
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

10、關閉特定的自動配置

我在pom.xml中添加了有關spring-boot-starter-data-jpa依賴,Spring Boot會自動進行JPA相關的配置,如果配置文件中沒有相關的配置啓動會報錯
則可以在spring的啓動類的@SpringBootApplication註解上添加exclude參數。
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

11、自定義Banner

在 src/main/resources 下新建一個banner.txt
通過網站:http://patorjk.com/software/taag 網站生成字符,將生成的字符複製到banner.txt中
關閉banner
  關閉banner第一種方法
  SpringApplication application = new SpringApplication(Ch522Application.class);
  application.setBannerMode(Banner.Mode.OFF);//關閉banner
  application.run(args);
  關閉banner第二種方法
  new SpringApplicationBuilder(Ch522Application.class).bannerMode(Banner.Mode.OFF).run(args);
  關閉banner第三種方法在application.properties 文件中配置如下
  spring.main.banner-mode = off

12、通過jar啓動時候指定參數

java  -jar  xx.jar  --server.port=9090

13、基於Docker的部署

1、把項目打成jar包傳到安裝了docker的服務器上。
2、編寫Dockerfile文件,與jar包放在同級目錄。
FROM java:8
MAINTAINER LXF
ADD spring_boot-0.0.1-SNAPSHOT.jar  app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
3、編譯鏡像
docker build -t wisely/ch10docker .
如果報錯:docker報錯Get https://registry-1.docker.io/v2/: x509: certificate has expired or is not yet valid
同步時間即可:
yum install -y ntp
ntpdate cn.pool.ntp.org   
推薦幾個時間服務器:
          time.nist.gov
          time.nuri.net
          asia.pool.ntp.org
          asia.pool.ntp.org
          asia.pool.ntp.org
          asia.pool.ntp.org
4、查看本地鏡像
docker images
5、運行鏡像
docker run -d -name ch10  -p 8080:8080 wisely/ch10docker

14、springBoot jar包部署

1、cd 項目跟目錄(和pom.xml同級)
mvn clean package
## 或者執行下面的命令
## 排除測試代碼後進行打包
mvn clean package  -Dmaven.test.skip=true
2、打包完成後 jar 包會生成到 target 目錄下,命名一般是 項目名+版本號.jar
java -jar  target/spring-boot-scheduler-1.0.0.jar   這種方式,只要控制檯關閉,服務就不能訪問了
nohup java -jar target/spring-boot-scheduler-1.0.0.jar &
java -jar app.jar --spring.profiles.active=dev  啓動時選取不同的配置文件
java -Xms10m -Xmx80m -jar app.jar &   設置jvm參數

15、springBoot war包部署

1、maven 項目,修改 pom 包
<packaging>war</packaging>
2、打包時排除tomcat
dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<scope>provided</scope>
</dependency>
3、註冊啓動類
創建 ServletInitializer.java,繼承 SpringBootServletInitializer ,覆蓋 configure(),把啓動類 Application 註冊進去。
外部 Web 應用服務器構建 Web Application Context 的時候,會把啓動類添加進去。
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}
4、打包
mvn clean package  -Dmaven.test.skip=true
5、放到tomcat的webapp中運行即可。

16、查看JVM參數值

jinfo -flags pid(進程號)
-XX:CICompilerCount=2  最大的並行編譯數
-XX:InitialHeapSize=16777216 指定 JVM 的最大堆內存大小
-XX:MaxHeapSize=257949696    指定 JVM 的初始堆內存大小
-XX:MaxNewSize=85983232 
-XX:MinHeapDeltaBytes=196608 
-XX:NewSize=5570560 
-XX:OldSize=11206656
-XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps

17、通過./xxx.jar啓動項目

1、maven,需要包含以下的配置
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>
2、打包 mvn clean package -Dmaven.skip.test=true
3、可以直接./yourapp.jar 來啓動
4、註冊爲服務,做一個軟鏈接指向你的jar包並加入到init.d中,然後用命令來啓動。
ln -s /var/yourapp/yourapp.jar /etc/init.d/yourapp
chmod +x /etc/init.d/yourapp
5、stop或者是restart命令去管理你的應用。
/etc/init.d/yourapp start|stop|restart
或者:service yourapp start|stop|restart

18、springBoot啓動完成之後初始化資源

1、直接創建一個類繼承 CommandLineRunner ,並實現它的 run() 方法。
2、在類中加上註解
       @Component
       @Order(1)  確保初始化的順序,越小越先執行。

19、springBoot定時任務

1、在啓動類上加上@EnableScheduling註解。
2、編寫定時任務類,在類上加上@Component註解,在方法上加上定時計劃 @Scheduled(cron="*/6 * * * * ?")

20、favicon(圖標)配置

1、在配置文件中設置,默認爲true
  spring.mvc.favicon.enabled=true
2、

21、springBoot集成jwt,實現token驗證

1、參考資料:https://www.jianshu.com/p/e88d3f8151db

22、springBoot全局異常處理

1、創建全局異常處理類:GlobalException 在類上加上註解 @RestControllerAdvice
2、創建具體的需要捕獲的異常方法:handleBusinessException(BusinessException be) ,在方法上加入註解。
     @ResponseBody
        @ExceptionHandler(BusinessException.class)
        public BaseResponse handleBusinessException(BusinessException be) {
            logger.warn(be.getMsg());
            BaseResponse fail = BaseResponse.fail(be.getErrorCode(), be.getMsg());
            return fail;
        }   

未完待續。。。

遇到的坑

1、不能自動建數據庫表排查原因我在啓動類上加了: @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
2、全局異常處理序列化問題:com.fasterxml.jackson.databind.exc.InvalidDefinitionException , 在BaseResponse 中放入Object對象會出現這個問題。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章