当前位置:   article > 正文

SpringBoot的使用的注解以及监控监控和lombok使用

SpringBoot的使用的注解以及监控监控和lombok使用

目录

修改SpringBoot项目中依赖的版本号

为什么默认是8.0.23版本

修改方法

第一种 :直接在pom.xml中引入相关依赖时直接指定版本号

第二种:在pom.xml中的属性中进行修改

 SpringBoot自动化配置web项目

@Configuration注解

@Import注解

1.导入Bean

2.导入外部配置类

3.导入ImportSelect实现类,批量生成bean

 4.导入ImportBeanDefinitionRegistrar实现类

@ConditionalOnBean

@ConfigurationProperties

@SpringBootApplication注解

@SpringBootConfiguration

@ComponentScan(    excludeFilters = {@Filter(    type = FilterType.CUSTOM,    classes = {TypeExcludeFilter.class}), @Filter(    type = FilterType.CUSTOM,    classes = {AutoConfigurationExcludeFilter.class})})

SpringBoot健康监控

服务端配置

导入依赖

在引导类中添加注解@EnableAdminServer

修改服务端端口号

 客户端配置,即自己写的程序

导入依赖

编写yml文件配置信息

启动服务端和客户端,并访问服务端

​编辑 lombok使用

然后@Data注解可以替换这三个注解

使用@Accessors让这个类可以链式编程

 使用@Builder,不使用链式编程

使用@Slf4j注解打日志


修改SpringBoot项目中依赖的版本号

在SpringBoot项目中导入数据库驱动的默认版本号为8.0.23

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <!-- <scope>runtime</scope>-->
  5. </dependency>

为什么默认是8.0.23版本

因为在parent中定义了这些导入依赖坐标的版本号,避免坐标冲突。

我们可以进入源码查看

修改方法

第一种 :直接在pom.xml中引入相关依赖时直接指定版本号

第二种:在pom.xml中的<properties>属性中进行修改

  1. <properties>
  2. <java.version>1.8</java.version>
  3. <mysql.version>8.0.13</mysql.version>
  4. </properties>

 SpringBoot自动化配置web项目

1.依赖版本和依赖坐标自动导入

2.自动化配置

        自动配好SpringMVC

  •                 引入SpringMVC全套组件
  •                 自动配好SpringMVC常用组件(三大组件,文件上传等)

        自动配好web常见功能,如:字符编码问题,静态资源管理

3.自动配好tomcat

@Configuration注解

让当前类变成配置类,代替配置文件

@Configration注解中的proxyBeanMethods属性功能

        proxyBeanMethods=true:Full模式,保证每个@Bean方法(配置类对象.getXxx()方法)被调用多少次返回的bean对象都是单例的即 和直接从容器中获取的bean对象是同一个

        proxyBeanMethods=false:Lite模式,每个@Bean方法 (getXxx())被调用时返回的bean对象都是重新new出来的

@Import注解

1.导入Bean

如:@Import(普通类.class)

会执行当前类的构造方法创建对象,并存到IoC容器,生成的bean名称类为:该普通类的全路径

2.导入外部配置类

如:@Inport(xxxConfig.class)

会创建xxxConfig类的bean,并且改配置类中带有@Bean注解的方法,都会创建@Bean方法返回对象的bean,生成bean的名称为:@Bean方法名

3.导入ImportSelect实现类,批量生成bean

  1. public class MyImportSelect implements ImportSelector {
  2. @Override
  3. public String[] selectImports(AnnotationMetadata annotationMetadata) {
  4. return new String[]{"com.hhh.pojo.Person"};//定义需要生成bean类的全路径
  5. }
  6. }
  1. @Configuration
  2. @Import(MyImportSelect.class)
  3. public class BookConfig {
  4. }

结果就会生成Person类的bean,并加入到IoC容器

注意:MyImportSelect类不会生成bean

 4.导入ImportBeanDefinitionRegistrar实现类

  1. public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
  2. @Override
  3. public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry, BeanNameGenerator importBeanNameGenerator) {
  4. AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Book.class).getBeanDefinition();
  5. registry.registerBeanDefinition("book1",beanDefinition);//给这个bean起名字为book1
  6. }
  7. }
  1. @Configuration
  2. @Import({MyImportSelect.class, MyImportBeanDefinitionRegistrar.class})
  3. public class BookConfig {
  4. }
  1. public class SpringTest {
  2. public static void main(String[] args) {
  3. ApplicationContext ctx=new AnnotationConfigApplicationContext(SpringConfig.class);
  4. Person bean = ctx.getBean(Person.class);
  5. Book book1 = (Book) ctx.getBean("book1");
  6. System.out.println(book1);//com.hhh.pojo.Book@7748410a
  7. // System.out.println(bean);
  8. }
  9. }

@ConditionalOnBean

@ConditionalOnBean(Person.class)//IoC容器中有这个Person类的bean才会让这个配置类生成bean

  1. @Configuration
  2. @ConditionalOnBean(Person.class)//IoC容器中有这个Person类的bean才会让这个配置类生成bean
  3. public class MyConfig {
  4. }

@ConfigurationProperties

根据prefix属性值进行赋值

 获取yml文件中的属性信息,并把yml文件中的属性值与对象类进行映射,并生成这个类的bean

@SpringBootApplication注解

 @SpringBootApplication注解由三个注解组成

@SpringBootConfiguration

 作用跟@Configuration差不多

@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)

 这个注解的意思就是会扫描与SpringBoot引导类处于同一路径下的所有包

SpringBoot健康监控

服务端配置

导入依赖

  1. <!--Spring Boot Admin Server监控服务端-->
  2. <dependency>
  3. <groupId>de.codecentric</groupId>
  4. <artifactId>spring-boot-admin-starter-server</artifactId>
  5. <version>2.3.1</version>
  6. </dependency>

在引导类中添加注解@EnableAdminServer

  1. @SpringBootApplication
  2. @EnableAdminServer
  3. public class SpringDay8ServerApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(SpringDay8ServerApplication.class, args);
  6. }
  7. }

修改服务端端口号

 客户端配置,即自己写的程序

导入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-actuator</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>de.codecentric</groupId>
  7. <artifactId>spring-boot-admin-starter-client</artifactId>
  8. <version>2.3.1</version>
  9. </dependency>

编写yml文件配置信息

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/mysql_day2?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&useSSL=false
  5. username: root
  6. password: 123456
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. boot:
  9. admin:
  10. client: # spring-boot-admin 客户端配置
  11. url: http://localhost:9999 #服务端连接地址
  12. username: admin # 服务端账号
  13. password: admin # 服务端密码
  14. instance:
  15. prefer-ip: true # 使用ip注册
  16. application:
  17. name: boot_client #项目名称
  18. # 服务端点详细监控信息
  19. management:
  20. endpoints:
  21. web:
  22. exposure:
  23. include: "*" #以web形式暴露
  24. enabled-by-default: true #暴露所有端点信息
  25. endpoint:
  26. health:
  27. show-details: always
  28. enabled: true #开启健康检查详细信息

启动服务端和客户端,并访问服务端

进入

 lombok使用

导入依赖

  1. <!-- lombok-->
  2. <dependency>
  3. <groupId>org.projectlombok</groupId>
  4. <artifactId>lombok</artifactId>
  5. </dependency>

 使用lombok我们就不需要自己写set,get,toString等方法,可以分别使用@Getter@Setter@ToString这三个注解,

然后@Data注解可以替换这三个注解

  1. //@Getter
  2. //@Setter
  3. //@ToString
  4. @Data
  5. public class User {
  6. private String name;
  7. private Integer age;
  8. private String address;
  9. }
  1. @Data
  2. @Accessors(chain = true)//允许链式编程
  3. public class User {
  4. private String name;
  5. private Integer age;
  6. private String address;
  7. }

使用@Accessors让这个类可以链式编程

结果:

  1. public class UserTest {
  2. @Test
  3. public void testUser(){
  4. User user=new User();
  5. user.setName("hhh").setAge(18).setAddress("北京");
  6. System.out.println(user);
  7. //User(name=hhh, age=18, address=北京)
  8. }
  9. }

 使用@Builder,不使用链式编程

  1. @Data
  2. //@Accessors(chain = true)//允许链式编程
  3. @Builder
  4. @NoArgsConstructor//无参构造
  5. @AllArgsConstructor//全参构造
  6. public class User {
  7. private String name;
  8. private Integer age;
  9. private String address;
  10. }
  1. public class UserTest {
  2. @Test
  3. public void testUser(){
  4. /* User user=new User();
  5. user.setName("hhh").setAge(18).setAddress("北京");
  6. System.out.println(user);*/
  7. User user = User.builder().name("hhh").age(18).address("北京").build();
  8. System.out.println(user);//User(name=hhh, age=18, address=北京)
  9. }
  10. }

使用@Slf4j注解打日志

  1. @Slf4j
  2. @Service
  3. public class UserServiceImpl implements UserService {
  4. @Override
  5. public void save() {
  6. log.info("BookService save");
  7. // System.out.println("service");
  8. }
  9. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号