spring boot的两种配置文件:

   虽然spring boot可以帮助我们进行一些配置项,但是有些内容还是需要开发者自己进行配置,因此spring boot提供了配置文件以供开发者配置。spring boot除了支持我们比较熟悉的properties文件之外,还支持yml格式的配置文件,默认是会创建properties格式的,这两个格式二选一即可。

   我们在配置文件中输入的时候会有提示,提示的数据是从这里获取的spring-configuration-metadata.json。第三方技术基本都会提供这样的json数据到spring boot里面,这样子我们在配置文件中配置这些第三方技术的时候也会有提示。

    首先我们先创建一个controller

 package com.scm.properties.controller;

 import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloController {
@GetMapping
public String hello(){
return "hello";
}
}

    application.properties

     基本可以将所有支持spring boot相关技术的配置文件都统一配置到application.properties里面。即如果你想添加或修改一些配置的话,直接操作application.properites即可。

#修改内置tomcat端口号
server.port=8081
#设置项目上下文
server.servlet.context-path=/springboot

    这里我们修改了tomcat的端口号以及项目的上下文,修改之后我们可以访问http:localhost:8081/springboot/hello

    application.yml

    spring boot支持的另外一种配置文件的格式是yml类型的,编写的yml配置文件时候要注意缩进,冒号后面要有空格,如果yml和properties两个配置文件都存在的话,properties优先级高。下面是yml中的格式,类似一棵树形结构,整体看上去要比properties简洁一些。

server:
servlet:
context-path: /springboot
port: 9090

    多环境配置

   在实际工作中通常会有多个环境,例如开发环境,测试环境,生产环境,每个环境都有自己独特的配置内容,这样可以创建多个配置文件用来区分。

     分别创建application-dev.propertiesapplication-test.properties、application-online.properties三个配置文件代表三个开发环境

开发环境:application-dev.properties
测试环境:application-test.properties
生产环境:application-online.properties

    如果想切换到某个开发环境需要在applicaiton.properties主配置文件中添加如下语句:

#切换到开发环境下
spring.profiles.active=dev

    这样就激活了application-dev.properties配置文件,如果application.properties与application-dev.properties中出现了相同的配置,则application.properties主配置文件中会失效;例如:application.properties中存在server.port=9090, application-dev.properties中存在server.port=9091,则此时端口号应该是9091。

    自定义配置

      除了spring-configuration-metadata.json中写好的配置项之外,我们可以在application.properties配置文件中自定义写入一些配置项。为了避免乱码,统一指定为utf-8。

 #字符编码位置要放到下面中文的上面,下面是指定字符编码
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
#自定义配置项
school.name=henu
school.address=China
school.age=10

    读取方式(一)使用使用@value注解,创建controller:

package com.scm.properties.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class ConfigInfoController {
@Value("${school.name}")
private String name;//此处变量名不要求与application.properties配置文件中保持一致
@Value("${school.address}")
private String address;
@Value("${school.age}")
private int age;
@GetMapping("/config")
public String initConfig(){
return name + "," + address + "," + age;
}
}

     通过@Value注解就可以获取我们在配置文件中写入的自定义配置。

    读取方式(二) 单独编写一个配置类,然后在controller中使用@Autowired注解注入该配置类。

package com.scm.properties.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; @Component
@ConfigurationProperties(prefix = "school")
public class ConfigInfo {
private String name;//此处声明的变量名要与application.properties配置文件中的保持一致
private String address;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

    @Component注解的作用就是将ConfigInfo类加入到spring容器中,这样我们就可以在controller中使用@AutoWired注解注入了。

    @ConfigurationProperties(prefix = "school")表示会从application.properties配置文件中读取以school开头的配置。

    注意:与@Value方式不同的一点是,这里我们在配置类中声明的私有变量name,address,age必须与配置文件中的一致,而@Value注解下的变量名不要求与配置文件中的一致。因为第二种方式我们在配置类中声明了ConfigurationProperties(prefix = "school"),spring boot会去配置文件中寻找以school为前缀,以我们声明的变量名为后缀的配置内容,所以第二种方式要保证声明的变量名与配置文件种的一致。第一种方式spring boot会直接寻找@Value中的${" "}内的参数,所以注解下的变量名不要求保持一致,只不过一般情况下都会保持一致。

    写完配置类之后,controller中代码如下:

 package com.scm.properties.controller;

 import com.scm.properties.config.ConfigInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class ConfigInfoController { @Autowired
private ConfigInfo configInfo;//将配置类注入
@GetMapping("/config1")
public String initConfig1(){
return configInfo.getName()+","+configInfo.getAddress()+","+configInfo.getAge();
}
}

    controller完成之后测试成功即可。

    一般情况下常用第二种方式读取,因为如果我们添加的自定义配置较多,则要写很多的@Value注解,这样代码就会显得很乱,所以我们只需要将所有参数都写入一个自定义的配置类即可。

    外部配置文件

    对于第二种方式我们还可以定义外部配置文件。如果要编写很多自定义配置到application.properties中的话,就会导致该配置文件冗余了,此时我们可以自己定义一个配置文件将自定义配置写到这个配置文件中。比如在resources目录下创建一个school.properties配置文件,然后将自定义配置写入到school.properties中。接着在配置类上只需要再添加@PropertySource注解,将之前application.properties文件中的自定义配置删除,此时再运行,即可从外部自定义配置文件读取配置项了。

#school.properties配置类
school.name=henu
school.address=China
school.age=10

    此时ConfigInfo配置类上一共有三个注解,@PropertySource用于指定配置文件的位置。

@Component
@PropertySource(value = "classpath:school.properties")
@ConfigurationProperties(prefix = "school")

    

    spring boot中使用JSP

   spring boot中没有直接支持jsp,官方建议使用thymeleaf、freeMarker模板作为前端的视图,不过我们可以通过配置来使用jsp。要想使用jsp首先就是要pom.xml中添加相关的依赖:

<!--引入Spring Boot内嵌的Tomcat对JSP的解析包-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- servlet依赖的jar包start -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<!-- servlet依赖的jar包end --> <!-- jsp依赖jar包start -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
</dependency>
<!-- jsp依赖jar包end --> <!--jstl标签依赖的jar包start -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--jstl标签依赖的jar包end -->

    在spring boot中默认的视图解析器为html,所以在这里我们要将视图解析器的改为jsp,在application.properties配置文件中添加如下代码:

spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

    我们说过spring boot中不是直接支持jsp的,所以我们还需要在pom.xml的<build>标签内添加如下配置:

<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
<resource>
<directory>src/main/webapp</directory>
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>

    上述三个resource标签分别表示将src/main/java下所有的.xml文件编译到target目录下、将src/main/resources下的所有文件编译到target目录下、将src/main/webapp(webapp需要手动创建、我们将创建的jsp文件都放在这个目录)下的jsp文件编译到META-INF/resources下。改配置主要是将jsp编译到META-INF里面,这样就可以访问到jsp了。

    在src/main/webapp下创建test.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
<html>
<body>
<h2>Hello World!</h2>
${msg}
</body>
</html>

    最后创建一个controller

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class JspController { @RequestMapping("/jsp")
public String jsp(Model model) {
model.addAttribute("msg", "hello JSP");
return "test";
}
}

    访问http://localhost:8080/jsp,到此为止spring boot中创建jsp已经全部完成。

Spring全家桶之spring boot(二)的更多相关文章

  1. Spring全家桶之spring boot(三)

    spring boot集成mybatis 众所周知,spring与springmvc可以无缝集成,而mybatis不是spring旗下的框架,因此需要进行配置,当然,这里的配置也是非常简单的. 1.首 ...

  2. Spring全家桶之spring boot(一)

    spring boot框架抛弃了繁琐的xml配置过程,采用大量的默认配置简化我们的开发过程.使用spring boot之后就不用像以前使用ssm的时候添加那么多配置文件了,spring boot除了支 ...

  3. Spring全家桶之spring boot(五)

    Thymeleaf简介 Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#.PHP语言体系下也 ...

  4. Spring全家桶之spring boot(四)

    spring boot拦截器.过滤器.servlet和健康检查机制  spring boot拦截器 spring boot配置拦截器与原来大致相同,只是需要在拦截器的配置类上添加@Configurat ...

  5. Spring全家桶之springMVC(二)

    spring mvc中url-pattern的写法 1.设置url-pattern为*.do 之前我们在web.xml文件中配置DispatcherServlet的时候,将url-pattern配置为 ...

  6. Java秋招面试复习大纲(二):Spring全家桶+MyBatis+MongDB+微服务

    前言 对于那些想面试高级 Java 岗位的同学来说,除了算法属于比较「天方夜谭」的题目外,剩下针对实际工作的题目就属于真正的本事了,热门技术的细节和难点成为了面试时主要考察的内容. 这里说「天方夜谭」 ...

  7. 10分钟详解Spring全家桶7大知识点

    Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...

  8. Spring全家桶系列–SpringBoot之AOP详解

    //本文作者:cuifuan //本文将收录到菜单栏:<Spring全家桶>专栏中 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关 ...

  9. 一文解读Spring全家桶 (转)

    Spring框架自2002年诞生以来一直备受开发者青睐,它包括SpringMVC.SpringBoot.Spring Cloud.Spring Cloud Dataflow等解决方案.有人亲切的称之为 ...

随机推荐

  1. async 和 await 例子

    /// <summary> /// C# 5.0 /// .net framework4.5 /// CLR4.0 /// 引入了async 和 await.这两个关键字可以让你更方便的写 ...

  2. [Asp.Net Core] Blazor Server Side 项目实践 - 切换页面时保留状态

    前言: 这是 项目实践系列 , 算是中高级系列博文, 用于为项目开发过程中不好解决的问题提出解决方案的. 不属于入门级系列. 解释起来也比较跳跃, 只讲重点. 因为有网友的项目需求, 所以提前把这些解 ...

  3. 一、搭建SpringBoot2.0.0M4基础Web项目

    本次开发环境为: 系统:Linux Mint 18 JDK:1.8 开发工具:IntelliJ IDEA 2017.2.4 1.启动IDEA工具,开始创建一个基础项目.点击Create New Pro ...

  4. (第五篇)Linux操作系统基本结构介绍

    Linux操作系统基本结构介绍 Linux系统一般有4个主要部分:内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用 ...

  5. 日志分析工具ELK(三)

    目前官网更新特别快,不到半年时间就更新了好几个版本,目前最新的是5.1 以下安装配置使用4.5版本的 https://www.elastic.co/guide/en/kibana/4.5/index. ...

  6. Scala教程之:scala的参数

    文章目录 默认参数值 命名参数 scala的参数有两大特点: 默认参数值 命名参数 默认参数值 在Scala中,可以给参数提供默认值,这样在调用的时候可以忽略这些具有默认值的参数. def log(m ...

  7. 第八章服务器raid及配置实战

      版本 特点 磁盘个数 可用空间 故障磁盘数 应用环境 RAID0 读写速度快,数据容易丢失 两个 全部 一块 测试,临时性 RAID1 读写速度慢,数据可靠 至少两个,可以2的倍数 总容量的一半 ...

  8. KMP & AC自动机

    KMP void kmp(char t[],char p[]) { int n=strlen(t),m=strlen(p); int *f=new int[m]; f[0]=f[1]=0; for(i ...

  9. 负载均衡服务之HAProxy访问控制ACL

    前文我们聊到了haproxy的错误页的配置,自定义日志的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12797913.html:今天我们主要来看看hap ...

  10. Vue 2.x折腾记 - (17) 基于Ant Design Vue 封装一个配置式的表单组件

    前言 写了个类似上篇搜索的封装,但是要考虑的东西更多. 具体业务比展示的代码要复杂,篇幅太长就不引入了. 效果图 2019-04-25 添加了下拉多选的渲染,并搜索默认过滤文本而非值 简化了渲染的子组 ...