SpringBoot项目中这十个开发技巧,你都知道吗?

开发 前端
日志的默认位置是相对于 Tomcat 基本目录的日志目录。默认情况下,日志目录是一个临时目录,如果你要固定目录,你可以安装如上配置,日志位于 pack-tomcat/logs 中,相对于应用程序的工作目录。

环境:SpringBoot3.2.5

1. 使用Maven自动扩展属性

通过使用资源过滤,你可以从 Maven 项目中自动扩展属性。如果使用 spring-boot-starter-parent,就可以用 @..@ 占位符引用 Maven "project properties",如下示例:

pack:
  app:
    java-version: "java.version@"
    springboot-version: "@project.parent.version@"
    sourceEncoding: "@project.build.sourceEncoding@"

测试

@Value("${pack.app.java-version}")
private String javaVersion ;
@Value("${pack.app.springboot-version}")
private String springBootVersion ;
@Value("${pack.app.sourceEncoding}")
private String sourceEncoding ;

输出结果

java-version: 17.0.9, springboot-version: 3.2.5, sourceEncoding: UTF-8

maven parent定义如下:

图片图片

注:在生成环境下,你将无法看到上面的输出结果,你需要做其它的配置,情况下面的第九条。

2. SpringApplication外部化配置

可以通过在 spring.main.* 中设置属性来将配置外部化

spring:
  main:
    web-application-type: servlet    
    banner-mode: off

其它配置属性如下

图片图片

如果你通过编程的方式也设置了上面的属性,如下:

SpringApplication app = new SpringApplication(Application.class) ;
app.setWebApplicationType(WebApplicationType.SERVLET) ;
app.setBannerMode(Mode.CONSOLE) ;
app.run(args) ;

那么配置文件中自定义配置优先级高于代码中设置。

注意看上面的配置属性,我们还可以之多多个源配置(其实就是添加一些配置类而已)。

spring:
  main:
    sources:
    - com.pack.CustomConfig
    - com.pack.AkfConfig

不通过编码,之间通过配置文件像容器中添加2个配置类。

3. 修改配置文件位置&名称

我们可以通过以下系统属性(或环境变量)来更改行为:

  • spring.config.name (SPRING_CONFIG_NAME)默认是application为名称
  • spring.config.location (SPRING_CONFIG_LOCATION)要加载的文件(如 classpath 资源或 URL)。为该文件设置了一个单独的环境属性源,它可以被系统属性、环境变量或命令行覆盖。

在应用启动时,我们需要制定系统属性或者对应的环境变量(上面的大写),如下

java -Dspring.config.name=app -jar MyApp.jar

指定配置文件的名称是app,启动时会自动的加载app.yml或者app.properties配置

java -Dspring.config.locatinotallow=d:\xxxooo\app.yml -jar MyApp.jar

指定配置文件的路径。

4. 激活配置文件

当你有如下配置文件时:

图片图片

除默认的applicaiton.yml配置文件外,还有其它针对不同环境的配置文件,你可以通过如下配置激活对应的配置文件:

spring:
  profiles:
    active:
    - dev

这里设置dev后上面的配置不仅会加载默认的application.yml还会加载application-dev.yml配置文件。

当你没有激活任何配置时(没有设置spring.profiles.active),在默认情况下会加载default配置,如:application-default.yml。通过如下配置修改:

spring:
  profiles:
    default: dev

这样配置后会加载application-dev.yml配置。

5. 设置父容器

在SpringMVC项目中默认是有父子容器说法,在SpringBoot项目默认是没有父子容器,不过我们可以通过如下方式设置父子容器。

SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class) ;
// 这样设置后,你当前容器将是父容器;child内部会再创建一个SpringApplicationBuilder同时设置是非web项目。
builder.child(ChildConfig.class) ;
// 这样设置后,你当前容器将是子容器。
builder.parent(ParentConfig.class) ;
builder.build().run(args) ;

不管是使用child还是parent,内部创建的都是AnnotationConfigApplicationContext容器。

6. 修改默认DispatcherServlet路径

默认情况下,所有接口访问都从根目录 (/) 进行。你可以按如下修改默认的访问路径:

spring:
  mvc:
    servlet:
      path: /api

这样配置后所有的请求都必须是/api/**开头。

对于DispatcherServlet的定义,我们可以通过自定义DispatcherServletRegistrationBean bean方式实现。

@Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
public DispatcherServletRegistrationBean dispatcherServletRegistration() {
  DispatcherServlet dispatcherServlet = new DispatcherServlet() ;
  // TODO; dispatcherServlet 相应配置
  DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(dispatcherServlet,
      "/api") ;
  registration.setName("dispatcherServlet") ;
  registration.setLoadOnStartup(0) ;
  return registration ;
}

该种方式实现更多的自定义配置。

7. 访问日志配置

访问日志可通过 Tomcat、Undertow 和 Jetty 各自的命名空间进行配置。如下是对Tomcat配置。

server:
  tomcat:
    basedir: "pack-tomcat"
    accesslog:
      enabled: true
      pattern: "%t %a %r %s (%D microseconds)"

日志的默认位置是相对于 Tomcat 基本目录的日志目录。默认情况下,日志目录是一个临时目录,如果你要固定目录,你可以安装如上配置,日志位于 pack-tomcat/logs 中,相对于应用程序的工作目录。

8. 启用 Tomcat 的 MBean 注册表

嵌入式 Tomcat 的 MBean 注册表默认是禁用的。这最大限度地减少了 Tomcat 的内存占用。如果你想使用 Tomcat 的 MBeans,例如让 Micrometer 使用它们来公开度量指标,就必须使用 server.tomcat.mbeanregistry.enabled 属性来实现,如下例所示:

server:
  tomcat:
    mbeanregistry:
      enabled: true

开启以后,通过jconsole查看MBean信息,如下:

图片图片

在这里你可以查看到Tomcat的各项指标信息。

9. 生成构建信息

Maven 插件和 Gradle 插件都允许生成包含项目坐标、名称和版本的构建信息。这些插件还可以通过配置添加其他属性。当存在此类文件时,Spring Boot 会自动配置一个 BuildProperties Bean。

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>3.2.5</version>
  <executions>
    <execution>
      <goals>
          <goal>build-info</goal>
      </goals>
    </execution>
  </executions>
</plugin>

通过上面的配置,你在配置文件中使用的@...@就会得到生效。

10. 生成Git信息

Maven 和 Gradle 都允许生成一个 git.properties 文件,其中包含项目构建时 git 源代码仓库的状态信息。添加如下插件:

<plugin>
  <groupId>io.github.git-commit-id</groupId>
  <artifactId>git-commit-id-maven-plugin</artifactId>
</plugin>

编译打包项目后,在你的jar包中的classes下会包含一个git.properties信息。内容如下(在控制台也会输出这些信息):

图片图片

jar包中的classes目录

图片图片

责任编辑:武晓燕 来源: Spring全家桶实战案例源码
相关推荐

2021-11-17 11:03:14

Python代码语法

2021-09-19 22:51:49

iPhone手机iOS

2020-09-11 06:39:29

ThreadLocal线程

2022-01-05 11:40:36

Go特性语言

2023-12-23 11:15:25

2020-10-28 11:20:55

vue项目技

2020-08-17 09:31:31

Git命令开发

2023-03-31 08:10:50

2021-04-06 11:30:50

疫情IT架构CIO

2020-02-20 08:30:49

OSPF网络协议路由协议

2017-10-13 11:13:16

微信隐藏功能视频编辑

2023-02-01 08:31:36

JavaScript循环遍历

2023-08-30 07:39:16

PawSQL数据库

2023-08-29 09:31:01

Scrapy网页爬虫

2024-01-18 07:46:53

HookReact回调函数

2022-03-03 23:56:29

JavaScriptArityAnonymous

2021-10-18 08:01:44

TS语言TypeScript

2022-11-07 16:06:15

TypeScript开发技巧

2022-05-16 07:48:54

Python操作类型

2016-01-11 09:48:07

点赞
收藏

51CTO技术栈公众号