当前位置: 首页 > article >正文

@SpringBootApplication

        默认的规则:@SpringBootApplication注解所在的类视为主类,放在主包之下,其他的放在主包的子包之下, Springboot都包含主启动类,不管是web应用还是非web应用,它都是通过主方法来启动Springboot项目的。@SpringBootApplication注解所在的类可以当做配置文件来使用,因为有@SpringBootConfiguration注解。

        @SpringBootApplication是 Spring Boot 的核心注解,也是一个复合注解,主要是由@SpringBootConfiguration,@EnableAutoConfiguration , @ComponentScan 3 个注解联合在一起组成的。

        1.@SpringBootConfiguration: @Configuration 注解,实现配置文件的功能。 ​  

        2.@EnableAutoConfiguration:开启自动配置的功能,初始化一些bean对象,并注入到spring容器中。也可以关闭某个自动配置的选项 例如: java 如关闭数据源自动配置功能:

         @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。 ​

        3.@ComponentScan :组件扫描器,扫描注解,根据注解的功能,创建java bean,给属性赋值等等。组件扫描器默认扫描的是@ComponentScan 注解所在的类,类所在的包和子包。

        @Configuration:

        使用@Configuration注解修饰的类可以当作配置文件来使用,用来配置spring容器,是配置spring容器的纯java方式,在这个javaConfig配置类中,我们可以通过定义方法结合@Bean注解来声明对象,就是在方法上面使用@Bean注解,把方法返回值对象注入到Spring容器中,如果@Bean注解不指定对象名称,默认这个方法名就是java对象在容器中的名字

@SpringBootApplication
public class Application{
    public static void main(String[] args){
        //第一个参数是主启动类的类名,第二个参数是你传给应用的参数args
        SpringApplication.run(Application.class,args);
    }
}
@Controller
public class BootController {
    @RequestMapping("/hello")
    @ResponseBody
    public String doSome(){
        return "欢迎使用SpringBoot";
    }

}

http://localhost:8080/hello:

Spring Boot核心配置文件application.properties

        Spring Boot 的核心配置文件,用于配置Spring Boot程序,名字必须以 application开始:

                        

                         

如果在一个程序里有两个配置文件,那是以哪一个为准呢?

        .properties 文件(默认采用该文件),启动有优先级properties>yml>ymal

# 访问web应用服务的端口号:默认为8080
server.port=8081

#设置访问应用的上下文路径:
server.servlet.context-path=/myboot

http://localhost:8081/myboot/hello 

多环境配置:

        在实际开发的过程中,我们的项目会经历很多的阶段(开发->测试->上线),每个阶段的配置也会不同,例如:端口、上下文根、数据库等,那么这个时候为了方便在不同的环境之间切换,SpringBoot提供了多环境配置,具体步骤如下:

        创建多个配置文件,名称规则: application-环境名称.properties(yml) 

  •         创建开发环境的配置文件: application-dev.properties( application-dev.yml )
  •         创建测试环境使用的配置:application-test.properties
  •         创建生产环境核心配置文件:application-product.properties

 

#application.yml 激活哪个配置文件:
spring:
  profiles:
    active: dev
#application-dev.yml 开发环境的配置文件:
server:
  port: 8081
  servlet:
    context-path: /mydev
#application-product.yml 生产环境的配置文件:
server:
  port: 8082
  servlet:
    context-path: /myproduct
#application-test.yml 测试环境的配置文件:
server:
  port: 8083
  servlet:
    context-path: /mytest
@Controller
public class BootController {
    @RequestMapping("/hello")
    @ResponseBody
    public String doSome(){
        return "欢迎使用SpringBoot的多配置文件";
    }

}

 

@Value注解读取属性配置文件:

@Value("$ {key}") , key来自application. properties(yml)

#application.yml 激活哪个配置文件:
spring:
  profiles:
    active: dev

server:
  port: 8080
  servlet:
    context-path: /myboot

#自定义key=value
school:
  name: 桂林电子科技大学
  website: www.application.com
  address: 广西壮族自治区

site: www.baidu.com
#application-dev.yml 开发环境的配置文件:
server:
  port: 8081
  servlet:
    context-path: /mydev
@Controller
public class BootController {
    @Value("${server.port}")
    private Integer port;
    @Value("${server.servlet.context-path}")
    private String contextPath;
    @Value("${school.name}")
    private String schoolName;
    @Value("${site}")
    private String site;

    @RequestMapping("/hello")
    @ResponseBody
    public String doSome(){
        return "schoolName:"+schoolName+",site:"+site+",项目的访问地址:"+contextPath+",使用的端口号:"+port;
    }
}

http://localhost:8081/mydev/hello :

如果你写在了你引用的这个配置文件中,application.yml配置文件里也有出现,那么这个site的值取决于你引用的那个配置文件:

#application-dev.yml 开发环境的配置文件:
server:
  port: 8081
  servlet:
    context-path: /mydev

site: application-dev

#application.yml 激活哪个配置文件:
spring:
  profiles:
    active: dev

server:
  port: 8080
  servlet:
    context-path: /myboot

#自定义key=value
school:
  name: 桂林电子科技大学
  website: www.application.com
  address: 广西壮族自治区

site: www.baidu.com
#application-dev.yml 开发环境的配置文件:
server:
  port: 8081
  servlet:
    context-path: /mydev

site: application-dev

        如果你的配置文件中没有school.site的话也没事,他会把能够匹配得到属性的赋值,没有的话赋默认值:

@AllArgsConstructor
@NoArgsConstructor
@Data
@Component
@ConfigurationProperties(prefix = "school")
public class SchoolInfo {
    private String name;
    private String website;
    private String address;
    private String site;
}
@Controller
public class BootController {
    @Value("${server.port}")
    private Integer port;
    @Value("${server.servlet.context-path}")
    private String contextPath;
    @Value("${school.name}")
    private String schoolName;
    @Value("${site}")
    private String site;

    @Resource
    private SchoolInfo schoolInfo;

    @RequestMapping("/hello")
    @ResponseBody
    public String doSome(){
        return "schoolName:"+schoolName+",site:"+site+",项目的访问地址:"+contextPath+",使用的端口号:"+port;
    }

    @RequestMapping("/info")
    @ResponseBody
    public String doInfo(){
        return "schoolInfo对象:"+schoolInfo;
    }

}

http://localhost:8081/mydev/info :

如果你不写前缀:那么前缀默认为空:

@AllArgsConstructor
@NoArgsConstructor
@Data
@Component
@ConfigurationProperties
public class SchoolInfo {
    private String name;
    private String website;
    private String address;
    private String site;
}

 

 在Springboot中我们如何使用容器

public static configurableApplicationContext run(Class<?> primarySource,String... args)
{
		return run(new class[]{primarySource},args);
}

ConfigurableApplicationContext :接口,是Applicationcontext的子接口

        只需要在 main 方法中执行 SpringApplication.run()方法获取方法的返回值,返回值就是Spring 容器对象,再去调用getBean()获取Java对象就可以了

@SpringBootApplication
public class Application{

    public static void main(String[] args){
        //第一个参数是主启动类的类名,第二个参数是你传给应用的参数args
        ConfigurableApplicationContext ac = SpringApplication.run(Application.class,args);
        SchoolInfo schoolInfo = (SchoolInfo)ac.getBean("schoolInfo");
        System.out.println(schoolInfo);
    }
}
@AllArgsConstructor
@NoArgsConstructor
@Data
@Component
@ConfigurationProperties(prefix = "school")
public class SchoolInfo {
    private String name;
    private String website;
    private String address;
    @Value("www.site.com")
    private String site;
}
#application.yml 激活哪个配置文件:
spring:
  profiles:
    active: dev

server:
  port: 8080
  servlet:
    context-path: /myboot

#自定义key=value
school:
  name: 桂林电子科技大学
  website: www.application.com
  address: 广西壮族自治区

site: www.baidu.com


http://www.kler.cn/news/364736.html

相关文章:

  • 开源限流组件分析(三):golang-time/rate
  • 数据结构:堆的应用
  • 解决:git SSL certificate problem: unable to get local issuer certificate
  • 基于RabbitMQ,Redis,Redisson,RocketMQ四种技术实现订单延时关闭功能及其相关优缺点介绍(以12306为主题)
  • 鸿蒙网络编程系列28-服务端证书锁定防范中间人攻击示例
  • Flutter 12 实现双击屏幕显示点赞爱心多种动画(AnimationIcon)效果
  • CSS揭秘:7. 伪随机背景
  • Sigrity Power SI Model Extraction模式如何提取电源网络的S参数和阻抗操作指导(一)
  • java脚手架系列10-统一缓存、分布式锁
  • 怎么做系统性能优化
  • WPF:Binding数据绑定
  • 接地电阻柜的生产流程
  • java项目之电影评论网站(springboot)
  • 【linux】centos7 安装openjdk-17
  • 笔记:WPF中MarkupExtension使用的IServiceProvider参数都有哪些
  • 星海智算:【王宝宝-ComfyUI-SD3】无需部署一键启动
  • ARM学习(33)英飞凌(infineon)PSOC 6 板子学习
  • 回归、分类模型的评估指标
  • G1(Garbage First)垃圾回收实战
  • 木木模拟器 MuMuPlayer Pro for Mac 下载安装详细教程(无需激活)
  • 人工智能_机器学习100_PCA数据降维算法_协方差和散度矩阵_深入理解_分析_协方差和散度矩阵计算过程---人工智能工作笔记0225
  • Kubernetes集群搭建容器云需要几台服务器?
  • 两个mp3音频怎么合成一个?音频合成的多个好用方法教程
  • python+大数据+基于热门视频的数据分析研究【内含源码+文档+部署教程】
  • 小程序云数据库通用操作
  • MySQL的group_concat函数:将分组中的多个值连接成一个字符串的聚合函数