SpringBoot3中的属性绑定注解和YMAL配置文件、日志

这篇具有很好参考价值的文章主要介绍了SpringBoot3中的属性绑定注解和YMAL配置文件、日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 常用注解

SpringBoot摒弃XML配置方式,改为全注解驱动

1. 组件注册

@Configuration@SpringBootConfiguration
@Bean@Scope
@Controller@Service@Repository@Component
@Import
@ComponentScan

步骤:

1、@Configuration 编写一个配置类
2、在配置类中,自定义方法给容器中注册组件。配合@Bean
3、或使用@Import 导入第三方的组件

2. 条件注解

如果注解指定的条件成立,则触发指定行为

@ConditionalOnXxx
@ConditionalOnClass如果类路径中存在这个类,则触发指定行为
@ConditionalOnMissingClass如果类路径中不存在这个类,则触发指定行为
@ConditionalOnBean如果容器中存在这个Bean(组件),则触发指定行为
@ConditionalOnMissingBean如果容器中不存在这个Bean(组件),则触发指定行为

例如:@ConditionalOnBean(value=组件类型,name=组件名字):判断容器中是否有这个类型的组件,并且名字是指定的值

@ConditionalOnRepositoryType (org.springframework.boot.autoconfigure.data)
@ConditionalOnDefaultWebSecurity (org.springframework.boot.autoconfigure.security)
@ConditionalOnSingleCandidate (org.springframework.boot.autoconfigure.condition)
@ConditionalOnWebApplication (org.springframework.boot.autoconfigure.condition)
@ConditionalOnWarDeployment (org.springframework.boot.autoconfigure.condition)
@ConditionalOnJndi (org.springframework.boot.autoconfigure.condition)
@ConditionalOnResource (org.springframework.boot.autoconfigure.condition)
@ConditionalOnExpression (org.springframework.boot.autoconfigure.condition)
@ConditionalOnClass (org.springframework.boot.autoconfigure.condition)
@ConditionalOnEnabledResourceChain (org.springframework.boot.autoconfigure.web)
@ConditionalOnMissingClass (org.springframework.boot.autoconfigure.condition)
@ConditionalOnNotWebApplication (org.springframework.boot.autoconfigure.condition)
@ConditionalOnProperty (org.springframework.boot.autoconfigure.condition)
@ConditionalOnCloudPlatform (org.springframework.boot.autoconfigure.condition)
@ConditionalOnBean (org.springframework.boot.autoconfigure.condition)
@ConditionalOnMissingBean (org.springframework.boot.autoconfigure.condition)
@ConditionalOnMissingFilterBean (org.springframework.boot.autoconfigure.web.servlet)
@Profile (org.springframework.context.annotation)
@ConditionalOnInitializedRestarter (org.springframework.boot.devtools.restart)
@ConditionalOnGraphQlSchema (org.springframework.boot.autoconfigure.graphql)
@ConditionalOnJava (org.springframework.boot.autoconfigure.condition)

3. 属性绑定

  • @ConfigurationProperties: 声明组件的属性和配置文件哪些前缀开始项进行绑定
  • @EnableConfigurationProperties快速注册注解
    • 使用场景:SpringBoot默认只扫描自己主程序所在的包。如果导入第三方包,即使组件上标注了 @Component@ConfigurationProperties 注解,也没用。因为组件都扫描不进来,此时使用这个注解就可以快速进行属性绑定并把组件注册进容器

将容器中任意组件(Bean)的属性值配置文件的配置项的值进行绑定

  • 1、给容器中注册组件(@Component@Bean
  • 2、使用@ConfigurationProperties 声明组件和配置文件的哪些配置项进行绑定

2. YAML配置文件

解决痛点:SpringBoot 集中化管理配置,application.properties。配置多以后难阅读和修改,层级结构辨识度不高

特点:

  • 设计目标,就是方便人类读写
  • 层次分明,更适合做配置文件
  • 使用.yaml.yml作为文件后缀

1. 基本语法

  • 大小写敏感
  • 使用缩进表示层级关系,k: v,使用空格分割k,v
  • 缩进时不允许使用Tab键,只允许使用空格。换行
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略。

支持的写法:

  • 对象键值对的集合,如:映射(map)/ 哈希(hash) / 字典(dictionary)
  • 数组:一组按次序排列的值,如:序列(sequence) / 列表(list)
  • 纯量:单个的、不可再分的值,如:字符串、数字、bool、日期

2. 示例

@Component
@ConfigurationProperties(prefix = "person") //和配置文件person前缀的所有配置进行绑定
@Data //自动生成JavaBean属性的getter/setter
//@NoArgsConstructor //自动生成无参构造器
//@AllArgsConstructor //自动生成全参构造器
public class Person {
    private String name;
    private Integer age;
    private Date birthDay;
    private Boolean like;
    private Child child; //嵌套对象
    private List<Dog> dogs; //数组(里面是对象)
    private Map<String,Cat> cats; //表示Map
}

@Data
public class Dog {
    private String name;
    private Integer age;
}

@Data
public class Child {
    private String name;
    private Integer age;
    private Date birthDay;
    private List<String> text; //数组
}

@Data
public class Cat {
    private String name;
    private Integer age;
}

properties表示法

person.name=张三
person.age=18
person.birthDay=2010/10/12 12:12:12
person.like=true
person.child.name=李四
person.child.age=12
person.child.birthDay=2018/10/12
person.child.text[0]=abc
person.child.text[1]=def
person.dogs[0].name=小黑
person.dogs[0].age=3
person.dogs[1].name=小白
person.dogs[1].age=2
person.cats.c1.name=小蓝
person.cats.c1.age=3
person.cats.c2.name=小灰
person.cats.c2.age=2

yaml表示法

person:
  name: 张三
  age: 18
  birthDay: 2010/10/10 12:12:12
  like: true
  child:
    name: 李四
    age: 20
    birthDay: 2018/10/10
    text: ["abc","def"]
  dogs:
    - name: 小黑
      age: 3
    - name: 小白
      age: 2
  cats:
    c1:
      name: 小蓝
      age: 3
    c2: {name: 小绿,age: 2} #对象也可用{}表示

3. 细节

  • birthDay 推荐写为 birth-day,用-来表示驼峰命名
  • 文本
    • 单引号不会转义【\n 则为普通字符串显示】
    • 双引号会转义【\n会显示为换行符
  • 大文本
    • |开头,大文本写在下层,保留文本格式,换行符正确显示
    • >开头,大文本写在下层,折叠换行符
  • 多文档合并
    • 使用---可以把多个yaml文档合并在一个文档中,每个文档区依然认为内容独立
    • 多配置文件:文件名可以是application-{profile}.properties/yml,用来指定多个不同的环境版本;默认使用application主配置文件,通过spring.profiles.active=dev激活指定的配置文件

4. 小技巧:lombok

简化JavaBean 开发。自动生成构造器、getter/setter、自动生成Builder模式等

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <!--compile:默认范围,编译测试运行都有效 -->
    <scope>compile</scope>
</dependency>

3. 日志配置

1. 简介

  1. Spring使用commons-logging作为内部日志,但底层日志实现是开放的。可对接其他日志框架。
  2. 支持 jullog4j2,logback。SpringBoot 提供了默认的控制台输出配置,也可以配置输出为文件。
  3. logback是默认使用的。
  4. 虽然日志框架很多,但是不用慌,使用 SpringBoot 的默认配置就能工作的很好

SpringBoot怎么把日志默认配置好的:

  • 1、每个starter场景,都会导入一个核心场景spring-boot-starter
  • 2、核心场景引入了日志的所用功能spring-boot-starter-logging
  • 3、默认使用了logback + slf4j 组合作为默认底层日志
  • 4、日志是系统一启动就要用,xxxAutoConfiguration是系统启动好了以后放好的组件,后来用的。
  • 5、日志是利用监听器机制配置好的。ApplicationListener
  • 6、日志所有的配置都可以通过修改配置文件实现。以logging开始的所有配置。

2. 日志格式

2023-06-07T22:18:12.568+08:00  INFO 7700 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2023-06-07T22:18:12.569+08:00  INFO 7700 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

默认输出格式:

  • 时间和日期:毫秒级精度
  • 日志级别:ERROR, WARN, INFO, DEBUG, or TRACE.
  • 进程 ID
  • —: 消息分割符
  • 线程名: 使用[]包含
  • Logger 名: 通常是产生日志的类名
  • 消息: 日志记录的内容

注意: logback 没有FATAL级别,对应的是ERROR

默认值:参照:spring-boot包additional-spring-configuration-metadata.json文件
默认输出格式值:"defaultValue": "%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"

以上配置使用的SpringBoot版本是:3.0.5

3. 记录日志

Logger logger = LoggerFactory.getLogger(getClass());

#或者使用Lombok@Slf4j注解

4. 日志级别

  • 由低到高:ALL<TRACE<DEBUG< INFO< WARN< ERROR<FATAL<OFF

    • 只会打印指定级别及以上级别的日志
    • ALL:打印所有日志
    • TRACE:追踪框架详细流程日志,一般不使用
    • DEBUG:开发调试细节日志
    • INFO:关键、感兴趣信息日志
    • WARN:警告但不是错误的信息日志,比如:版本过时
    • ERROR业务错误日志,比如出现各种异常
    • FATAL致命错误日志,比如jvm系统崩溃
    • OFF关闭所有日志记录
  • 不指定级别的所有类,都使用root指定的级别作为默认级别

  • SpringBoot日志默认级别INFO

  1. application.properties/yaml中配置logging.level.<logger-name>=<level>指定日志级别
  2. level可取值范围:TRACE, DEBUG, INFO, WARN, ERROR, FATAL or OFF,定义在 LogLevel类中
  3. root 的logger-nameroot,可以配置logging.level.root=warn,代表所有未指定日志级别都使用 root 的warn 级别

5. 日志分组

比较有用的技巧是:

将相关的logger分组在一起,统一配置。SpringBoot 也支持。比如:Tomcat 相关的日志统一设置

logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat
logging.level.tomcat=trace

SpringBoot 预定义的两个组:

Name Loggers
web org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans
sql org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener

6. 文件输出

SpringBoot 默认只把日志写在控制台,如果想额外记录到文件,可以在application.properties中添加logging.file.name or logging.file.path配置项。也可以直接在日志配置文件中直接指定

常用的logback-spring.xml模板:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1000 seconds">
    <springProperty scope="context" name="spring.application.name" source="spring.application.name" defaultValue="app"/>
    <timestamp key="date" datePattern="yyyyMMdd"/>
    <property name="colorfulPattern"
              value="%blue(%d{MM-dd HH:mm:ss}) [%boldYellow(%thread)] | %highlight(%-5level) | %boldGreen(%logger) %X{clientIp} %X{operateId} - %highlight(%msg) %n"/>
    <property name="defaultPattern"
              value="%d{MM-dd HH:mm:ss} [%thread] | %-5level | %logger %X{clientIp} %X{operateId} - %msg %n"/>
    <property name="log.base_path" value="E:\data\logs"/>
    <!-- 日志文件大小,超过这个大小将被压缩 -->
    <property name="log.max.size" value="100MB"/>

    <!--控制台输出 -->
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${colorfulPattern}</pattern>
            <!--            <pattern>${defaultPattern}</pattern>-->
        </encoder>
    </appender>

    <appender name="trace.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base_path}/${spring.application.name}/trace.${spring.application.name}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>
                ${log.base_path}/archive/${spring.application.name}/trace.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${log.max.size}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${defaultPattern}</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>TRACE</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="info.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base_path}/${spring.application.name}/info.${spring.application.name}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>
                ${log.base_path}/archive/${spring.application.name}/info.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${log.max.size}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${defaultPattern}</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="debug.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base_path}/${spring.application.name}/debug.${spring.application.name}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>
                ${log.base_path}/archive/${spring.application.name}/debug.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${log.max.size}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${defaultPattern}</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="error.appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.base_path}/${spring.application.name}/error.${spring.application.name}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>
                ${log.base_path}/archive/${spring.application.name}/error.${spring.application.name}.%d{yyyyMMdd}.%i.log.zip
            </fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                    class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>${log.max.size}</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${defaultPattern}</pattern>
        </layout>
        <!-- 下面为配置只输出error级别的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
    <!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
    <!-- 添加附加的appender,最多只能添加一个 -->
    <appender name="trace.async" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>256</queueSize>
        <includeCallerData>true</includeCallerData>
        <appender-ref ref="trace.appender"/>
    </appender>
    <!-- http rest 请求日志 -->
    <logger name="cn.felord.common.http.RestBodyAdvice" level="TRACE"/>
    <logger name="cn.felord.app.mapper" level="DEBUG"/>
    <!-- dev 环境调试  -->
    <springProfile name="dev">
        <logger name="org.springframework.security" level="TRACE" additivity="false" >
            <appender-ref ref="stdout"/>
        </logger>
        <logger name="org.springframework.security.oauth2" level="DEBUG" additivity="false" >
            <appender-ref ref="stdout"/>
        </logger>
        <logger name="org.springframework.web" level="TRACE" additivity="false" >
            <appender-ref ref="stdout"/>
        </logger>
    </springProfile>

    <root level="info">
        <appender-ref ref="stdout"/>
        <appender-ref ref="info.appender"/>
        <appender-ref ref="debug.appender"/>
        <appender-ref ref="error.appender"/>
        <appender-ref ref="trace.async"/>
    </root>
</configuration>

7. 文件归档与滚动切割

归档:每天的日志单独存到一个文档中。
切割:每个文件10MB,超过大小切割成另外一个文件。

  1. 每天的日志应该独立分割出来存档。如果使用logback(SpringBoot 默认整合),可以通过application.properties/yaml文件指定日志滚动规则。
  2. 如果是其他日志系统,需要自行配置(添加log4j2.xmllog4j2-spring.xml
  3. 支持的滚动规则设置如下
配置项 描述
logging.logback.rollingpolicy.file-name-pattern 日志存档的文件名格式(默认值:${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
logging.logback.rollingpolicy.clean-history-on-start 应用启动时是否清除以前存档(默认值:false
logging.logback.rollingpolicy.max-file-size 存档前,每个日志文件的最大大小(默认值:10MB
logging.logback.rollingpolicy.total-size-cap 日志文件被删除之前,可以容纳的最大大小(默认值:0B)。设置1GB则磁盘存储超过 1GB 日志后就会删除旧日志文件
logging.logback.rollingpolicy.max-history 日志文件保存的最大天数(默认值:7)

8. 自定义配置

通常配置 application.properties 就够了。当然也可以自定义。比如:

日志系统 日志系统 自定义
Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

最佳工作实践:自己要写日志配置文件,配置文件名加上 xx-spring.xml

9. 切换日志组合

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2支持XML、JSON、YAML和properties四种配置文件格式文章来源地址https://www.toymoban.com/news/detail-510143.html

10. 工作实践

  1. 导入任何第三方框架,先排除它的日志包,因为SpringBoot底层控制好了日志
  2. 修改 application.properties 配置文件,就可以调整日志的所有行为。如果不够,可以编写日志框架自己的配置文件放在类路径下就行,比如logback-spring.xmllog4j2-spring.xml
  3. 如需对接专业日志系统,也只需要把 logback 记录的日志灌倒 kafka之类的中间件,这和SpringBoot没关系,都是日志框架自己的配置,修改配置文件即可
  4. 业务中使用slf4j-api记录日志。不要再 System.out.println()

到了这里,关于SpringBoot3中的属性绑定注解和YMAL配置文件、日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot3之配置文件(学习SpringBoot3的配置这一篇足够)

    1.1 SpringBoot3简介 SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用(说明:SpringBoot底层是Spring) ,大多数 SpringBoot 应用只需要编写少量配置即可快速整合 Spring 平台以及第三方技术! SpringBoot的主要目标是: 为所有 Spring 开发提供更快速、可广泛访问的入

    2024年01月18日
    浏览(21)
  • 【踩坑日志】SpringBoot读取nacos配置信息并提取信息中的IP地址(配置属性解析异常+排错记录)

    缘起 :项目需读取nacos中动态的TDengine数据库连接信息并提取IP,一个并不复杂的操作,但作为一个nacos知识浅薄的菜鸡,我愣是捯饬了几个小时……惭愧惭愧…… 异常代码 报错信息 报错核心: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Coul

    2024年01月19日
    浏览(19)
  • SpringBoot3自动配置原理

    遵循约定大约配置的原则,在boot程序启动后,起步依赖中的一些bean对象会自动注入到ioc容器 看一下我们前面写的代码有没有达到自动配置的效果呢? 没有自动,我们写了配置类,写了@Import注解,所以并没有达到自动配置的效果。那怎么办呢?接下来我们通过翻看源码的方

    2024年01月22日
    浏览(16)
  • 【微服务~原始真解】Spring Cloud —— 配置绑定和配置属性校验

    🔎这里是【秒懂·云原生】,关注我学习云原生不迷路 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 【秒懂·云原生】 目前主要更新微服务,一起学习一起进步。 主要介绍Spring Cloud —— 配置绑定和配置属性校验 所谓“配置绑定”就

    2024年02月02日
    浏览(14)
  • Java --- springboot3依赖管理和自动配置机制

    目录 一、依赖管理机制 二、自动配置机制  三、自动配置流程 🚕 、为什么导入 starter-web 所有相关依赖都导入进来? ①、开发什么场景,导入什么 场景启动器。 ②、maven依赖传递原则。A-B-C: A就拥有B和C ③、导入 场景启动器。 场景启动器 自动把这个场景的所有核心依赖

    2024年02月07日
    浏览(30)
  • Spring属性注解对配置项名称的自动转换

           在Spring中,我们经常需要将配置文件中的属性值注入到Java类中。Spring提供了两个主要的注解来实现这一功能: @Value 和 @ConfigurationProperties 。其中 @ConfigurationProperties 支持将配置项名称与Java类中的属性名进行自动转换,包括 \\\' - \\\' 和\\\' 驼峰命名 \\\'的转换;而 @Value 不支

    2024年02月15日
    浏览(10)
  • 高版本springboot3.1配置Eureka客户端问题

    只需要按上面配置好,然后高版本的Eureka,不需要@EnableEurekaClient这个注解了,直接SpringBoot启动,就可以注册到注册中心。 /*********************************************************/ /**  * 开启eureka客户端功能  */ //@EnableEurekaClient /**  * @EnableEurekaClient和@EnableDiscoveryClient都让注册中心能够发

    2024年02月10日
    浏览(11)
  • SpringBoot实现注解的属性动态注入。以ElasticSearch的java查询的indexName为例

    最近接了个需求,需要每天从ElasticSearch(下称es)中取出数据然后持久化到mysql数据库里,而我们项目的es里的数据都是以日期作为index来存储的,那么就需要用程序每天定时进行拉取。我们用springboot的spring-boot-starter-data-elasticsearch(类似mybatis的框架)进行数据CRUD时需要为实

    2023年04月08日
    浏览(12)
  • springboot3整合consul实现服务注册和配置管理快速入门

    服务注册: 配置管理: 注册中心的比较: 在微服务的世界中,服务注册是必不可少的。现在比较流行的也就是Consul和Nacos,Zookeeper没有管理界面,一般不建议使用,而Eureka已经处于停更,并且本身就存在很多bug,一般不建议使用! 我之前写过一篇spring boot整合nacos实现服务注

    2024年04月16日
    浏览(18)
  • 【Docker】RocketMQ5.1.0的配置部署与基于SpringBoot3.0.5的代码基础配置

    JAVA 17 SpringBoot 3.0.5 CentOS 7.5 Rocket 5.1.0 1.1 查看镜像 1.2 拉取镜像 1.3 查看已拉取镜像 1.4 创建挂载文件夹 1.4.1 创建Broker挂载文件夹 1.4.2 创建NameServer挂载文件夹 1.5 启动容器以复制配置文件 1.5.1 启动NamerServer容器 1.5.2 复制NameServer启动脚本 1.5.3 修改脚本文件 1.5.4 停止并删除Name

    2024年02月12日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包