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. 不停机还能替换代码?6年的 Java程序员表示不可思议

    相信很多人都有这样一种感受,自己写的代码在开发.测试环境跑的稳得一笔,可一到线上就抽风,不是缺这个就是少那个反正就是一顿报错,而线上调试代码又很麻烦,让人头疼得很.不过, 阿里巴巴出了一款名叫Arth ...

  2. python慎用os.getcwd() ,除非你知道【文件路径与当前工作路径的区别】

    当你搜索 "获取当前文件路径" 时,有的文章会提到用os.getcwd(),但是这玩意要慎用! 废话不多说,直接上例子: E:\program_software\Pycharm\y ...

  3. linux下文件的打包和压缩

    文章来源:linux下文件的打包和压缩 目录 一.文件压缩的原理 二.linux常见的压缩指令 三.常用实例 1.tar命令 2.zip命令 3.gz命令 4.bz2命令 5.xz命令(必须分两步) ...

  4. javascript-数组简单的认识

    一起组团(什么是数组) 我们知道变量用来存储数据,一个变量只能存储一个内容.假设你想存储10个人的姓名或者存储20个人的数学成绩,就需要10个或20个变量来存储,如果需要存储更多数据,那就会变的更麻烦 ...

  5. urlencode()和rawurlencode()区别

    urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的 ,唯一的不同是对空格的处理,   urlencode处理成“+”,    rawurlencod ...

  6. Linux下解压rar压缩包

    wget http://www.rarlab.com/rar/rarlinux-x64-4.2.0.tar.gz rar软件不需要安装,直接解压到/usr/local下,以下操作需要有root权限. ...

  7. Android | 教你如何使用HwCameraKit接入相机人像模式

    目录 介绍 简介 关于本次CodeLab 你将建立什么 你会学到什么 你需要什么 申请Camera相关权限 集成HwCameraKit开放能力 步骤1 模式创建:获取CameraKit实例,创建人像模 ...

  8. mysql-管理命令【创建用户、授权、修改密码、删除用户和授权、忘记root密码】

    一.创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 关键参数说明: username - 创建登录用户名, host ...

  9. Tomcat实现Session复制

    Tomcat实现Session复制 需要三台虚拟机一台Nginx两台Tomcat 关闭相关的安全机制 systemctl stop firewalldiptables -Fsetenforce 0 首 ...

  10. java之 惰性初始化

    class Soap { private String s; Soap(){ System.out.println("Soap()"); s="Constructed&q ...