SpringBoot(一)

一。

每个Spring Boot版本都提供了它支持的依赖项的列表,当你升级Spring Boot的版本时,依赖项也会以一致的方式升级,如果有需要,你仍然可以指定版本覆盖springboot的默认版本。当然除了定义依赖版本,spring-boot-starter-parent还提供了以下特性:

默认使用Java 8
使用UTF-8编码
一个依赖管理的功能,管理公共依赖的版本,在dependencies里的依赖可以不用填写version信息,这些version信息会从spring-boot-dependencies里得到继承,这点就是上面所说的。
合理的资源过滤(Sensible resource filtering.)
识别插件的配置(Sensible plugin configuration (exec plugin, surefire, Git commit ID, shade).)
能够识别application.properties和application.yml类型的文件,同时也能支持profile-specific类型的文件(例如: application-dev.properties 和 application-dev.yml,这个功能可以更好的配置不同生产环境下的配置文件)。
如果你需要从其他父pom继承或者你不喜欢这种方式,当然还有其他解决解决方案,如下:

<dependencyManagement>
    <dependencies>
        <dependency>
                <!--从springboot导入依赖关系管理 -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.1.1.RELEASE</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>
以上两种方式都行,由实际情况取舍。

子工程的pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.eastcom</groupId>
    <artifactId>SpringBoot_Demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>SpringBoot_HelloWorld</artifactId>
  <packaging>war</packaging>
  
  <dependencies>
      <dependency>
          <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
  </dependencies>
</project>
只需导入spring-boot-starter-web,官网对它的描述是:使用Spring MVC构建Web(包括RESTful)应用程序的入门者,使用Tomcat作为默认嵌入式容器。

创建的是war包,导入的这个starter默认你开发的就是web应用程序并会相应的对Spring进行一些默认配置。比如描述里说的默认是使用Tomcat作为web容器,默认端口8080,当然这些你都可以修改。

编写测试代码
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
@SpringBootApplication
public class Application {
    
    @RequestMapping(value="/hello",method=RequestMethod.GET)
    public String hello() {
        return "Hello World!";
    }
    
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
就Application类中的几个注解简单解释一下:

@RestController和@RequestMapping是Spring MVC的注解。

@RestController和@Controller一样都是标注在Controller上的注解,上面hello方法返回的是String,如果这里用的是@Controller而不是@RestController,那么在hello方法还应该加一个注解@ResponseBody,使用@RestController表示该类中方法返回的String可以直接在浏览中输出。

@RequestMapping注释提供路由信息,也就是其中的value值,带/hello路径的请求会映射到hello方法,method指定请求为get请求。

@SpringBootApplication注解,该注解是一个复合注解,包括@ComponentScan、@SpringBootConfiguration、@EnableAutoConfiguration三个注解。该注解一般是放在主类上,也就应用程序的入口类上,@SpringBootApplication注解会去扫描被该注解标注的类所在包及其子包下被特定注解(比如说@Controller、@Repository、@Service、@Component、@Configuration等等)标注的类,并把它们纳入spring容器管理。

@SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。

@EnableAutoConfiguration的作用启动自动的配置,@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置。

@ComponentScan就是扫描包了,上面说@SpringBootApplication注解会扫描包就是因为有这个注解了。

你也可以使用@ComponentScan注解和@EnableAutoConfiguration注解代替@SpringBootApplication注解,其效果是一样的。

启动项目
右键-->Run As-->Spring Boot App,在控制台就能看到相应启动信息了。

输出信息最上面的是banner图,这个也是可以改的,下面紧接着的是版本信息,然后就是项目启动的日志,可以看到红框中日志,Tomcat端口是8080。

 

二。

配置文件的位置
配置文件的位置也可以放到不同的位置,当然,不同的位置配置文件读取的优先级肯定也不同,下面是配置文件可以放置的四个位置,优先级依次从高到低:

file:./config/                项目当前路径下的config子目录
file:./                           项目当前目录
classpath:/config/       类路径下的config目录
classpath:/                  类路径下
在这四个位置新建四个配置文件,然后在项目中看一下这四个位置,图中数字跟上面数字对应。

然后在每一个配置文件中添加一个配置com.eastcom.index,值跟图中的数字对应,分别是1,2,3,4。另外我把每个配置文件中都加上了上面的三个自定义配置,并把版本号稍微改成跟顺序对应。如下:

在Application类添加代码,如下:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
        MyConfiguration_Value myConfiguration_Value = context.getBean(MyConfiguration_Value.class);
        System.out.println(myConfiguration_Value.toString());
        
        MyConfiguration_Properties myConfiguration_Properties = context.getBean(MyConfiguration_Properties.class);
        System.out.println(myConfiguration_Properties.toString());
        
        System.out.println(context.getEnvironment().getProperty("com.eastcom.index"));
        context.close();
    }
}

三。使用 spring.profiles.active来分区配置

spring-boot-starter-parent提供的特性,其中就包括能够识别application.properties和application.yml类型的文件,同时也能支持profile-specific类型的文件(例如: application-dev.properties 和 application-dev.yml,这个功能可以更好的配置不同生产环境下的配置文件)。
新建三个配置文件,分别为application-dev.properties(开发)、application-test.properties(测试)、application-prod.properties(生产)。

可以使用spring.profile.active配置项在application.properties配置文件中指定哪些配置文件处于活动状态,可以指定多个。

新建一个配置类MyActiveProfileConfig等会要用,代码如下:


@Profile("dev")表示只有当启动的配置是开发环境的配置是才创建这个bean,@Profile也可以放在类上,意思是一样的,只有当启用某个配置文件是才去创建这个配置类中的bean。

为了跟上面说的分开,再重新创个主类AppActiveProfile吧,强迫症,全混一起感觉太乱了。代码如下:

@SpringBootApplication
public class AppActiveProfile {
    public static void main(String[] args) {
        SpringApplication application = new SpringApplication(AppActiveProfile.class);
//        application.setAdditionalProfiles("dev","prod");
        ConfigurableApplicationContext context = application.run(args);
        context.close();
    }
}
运行看打印信息。设置启用的是dev和test,可以看到已经启用了,@Profile注解是生效了的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值