目录
SpringBoot项目创建
SpringBoot项目的web应用
配置文件
properties
读取配置文件信息
value注解产生中文乱码
引号的问题
yml
yml配置对象
yml配置集合
SpringBoot可以简化Spring程序,它使用 “约定大于配置” 的理念让你的项目快速运行起来。
SpringBoot优点:
1、快速集成框架,SpringBoot提供了启动添加依赖的功能,用于秒级生成各类框架
2、内置运行容器,无需自己配置Tomcat等web容器,直接运行和部署程序
3、快速部署项目,无需外部容器即可启动并且运行项目
4、完全抛弃xml,使用注解和配置来开发
5、支持更多监控的指标
使用社区版的idea来创建SpringBoot项目
1、安装Spring Assistant插件
File-》settings-》plugins-》搜索Spring Assistant插件安装
2、创建SpringBoot项目:File-》new Project
选择初始化Spring服务时,如果是Default,默认从国外拉取配置,可以在custom内输入国内源来配置
3、运行项目
Spring项目只是一个简单的java项目,不可以直接和浏览器关联进行web开发,而SpringBoot项目内置了Tomcat容器,我们可以直接进行web开发
在文件创建时生成的com.eample.demo的同级目录或者子级目录中创建类, SpringBoot项目不需要使用xml文件设置扫描路径,因为默认com.eample.demo包是扫描路径,在他外面的类是不会注册到容器的(这是SpringBoot的约定)
@Controller//加五大注解之一 让这个类对象注册到Spring框架内
public class Hello {
@ResponseBody //说明返回的是一个String类型的数据,这个数据存放在body内
@RequestMapping("/hello")//设置路由 也就是设置url路径
public String print() {
return "hello SpringBoot";
}
}
点击运行
RequestMapping注解可以加到类上,也可以加到方法上
用于配置项目中重要的数据,例如:
1、数据库连接信息(用户名,密码等)
2、项目端口
3、日志文件
4、第三方系统调用的密钥
配置文件分为两类:系统的配置文件、自定义的配置文件
配置文件的两种格式:properties和yml
properties是之前的格式,yml是对properties的升级更新
创建File,命名application.yml,创建yml文件
yml和properties可以共存,但是如果更改重复,会以properties为准
同一目录下存在:application.properties和application.yml时,application.properties优先级>application.yml。
也就是说,两者同时存在时properties文件会覆盖yml文件。
properties默认没有提示,可以安装Spring Tools插件
默认格式:键值对 key=value
properties是默认不支持中文的,可以进行修改:settings->输入encoding
上述设置的是当前文件,还要设置新创建文件
这时,当前项目的properties不支持中文编码的格式已经成型了,删除properties文件后重新创建,后序文件都支持中文了
使用@value注解,@value注解使用”${}“格式读取
value注解只可以一次读取一个注解信息
@Controller
public class Get {
@Value("${server.port}")
private int port;//读取到的配置信息 会被填充到port变量内
private String name="servlet.port";
@ResponseBody
@RequestMapping("/get")
public String get(){
return name+"="+port;
}
}
@Controller
public class Get {
@Value("${demo.name}")
private String demo;//读取到的配置信息 会被填充到port变量内
@ResponseBody
@RequestMapping(value = "/get", produces = "application/json;charset=UTF-8")//设置路径 和返回数据的格式
public String get() {
System.out.println(demo);
return demo;
}
}
发现浏览器输出和打印都是乱码,也就是说在value注解读取时发生乱码了
Spring读取application.properties中间默认编码是ISO-8859-1,如果需要中文显示,需要设置spring读取配置设置编码为UTF-8
方法1、在application.properties中添加如下配置
spring.banner.charset=UTF-8
spring.messages.encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.force=true
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
然后settings-》File Encodings-》设置Transparent native-to-ascii conversion为true
重启后运行,显示中文
方法2、使用PropertySource注解
在Controller类的这个位置加上
@PropertySource(value = “classpath:application.properties”,encoding = “UTF-8”)
@Controller
@PropertySource(value = "classpath:application.properties",encoding = "UTF-8")
public class Get {
@Value("${demo.name}")
private String demo;//读取到的配置信息 会被填充到port变量内
@ResponseBody
@RequestMapping(value = "/get", produces = "application/json;charset=UTF-8")//设置路径 和返回数据的格式
public String get() {
System.out.println(demo);
return demo;
}
}
方法3、直接使用yml
yml是默认支持中文的,value读取时不会引起乱码
@Controller
public class Get {
@Value("${demo2.name}")
private String name;//读取到的配置信息 会被填充到port变量内
@ResponseBody
@RequestMapping(value = "/get")//设置路径 和返回数据的格式
public String get() {
System.out.println(name);
return name;
}
}
@Controller
public class Get {
@Value("${Text.name1}")
private String name1;//读取到的配置信息 会被填充到port变量内
@Value("${Text.name2}")
private String name2;//读取到的配置信息 会被填充到port变量内
@Value("${Text.name3}")
private String name3;//读取到的配置信息 会被填充到port变量内
@ResponseBody
@RequestMapping(value = "/get")//设置路径
public String get() {
System.out.println(name1);
System.out.println(name2);
System.out.println(name3);
return "ok";
}
}
也就是说
1、字符串默认不需要单引号或者双引号
2、如果没有引号或是单引号,会自动对特殊字符转义:你好 \n SpringBoot-》你好 \\n SpringBoot
让\n这个换行符转译为"\n"字符串
3、如果是双引号,不会对特殊字符转义
yml是跨语言的,java,golang,python等都可以使用yml作为配置文件
yml格式如下
key: value
中间有一个空格
在poperties中连接数据库:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Infor?charsetEncoding=utf-8&&useSSL=false
spring.datasource.name=root
spring.datasource.password=123
yml中连接数据库:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/Infor?charsetEncoding=utf-8&&useSSL=false
name: root
password: 123
yml表述会比 poperties简单
另外,yml支持多种数据类型 整形,浮点型,布尔类型,NULL(使用~表示)
# 配置对象
Student:
name: 张三
age: 10
# 或者 使用行内写法
Student1: { name: 李四 , age: 20}
使用@ConfigurationProperties注解读取信息
@Controller//在项目启动时,配置文件的读取 就已经完成了 要加入五大类注解
@ConfigurationProperties(prefix = "Student")//prefix 绑定配置信息的key
// Student是一个类,会生成一个对象,通过Student类的方法来将配置文件的属性填充入对象
public class StudentInfo {
private String name;
private int age;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
@Controller
public class GetStudent {
//配置文件的Student已经存在了 可以根据 属性注入来获取
@Autowired
private StudentInfo studentInfo;
@ResponseBody
@RequestMapping("/student")
public StudentInfo getStudent() {
return studentInfo;
}
}
报错原因:
SpringBoot要求配置文件不能使用驼峰式
解决办法
在prefix中写出规范形式即可
例如:Student-》student ; Student_info->student-info
Data注解可以产生getting、setting、toString等方法
@Controller//在项目启动时,配置文件的读取 就已经完成了 要加入五大类注解
@ConfigurationProperties(prefix = "student")//prefix 绑定配置信息的key
@Data
// Student是一个类,会生成一个对象,通过Student类的方法来将配置文件的属性填充入对象
class StudentInfo {
private String name;
private int age;
}
# 配置集合
student :
name:
- 张三
- 李四
- 王五
或者
student3 : {name: [张三,李四,王五,糖豆] }
@PostConstruct是java5的时候引入的注解,指的是在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。
被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。
@Data
@Controller
@ConfigurationProperties(prefix = "student")//根据配置信息 创建Student对象
public class Student {
private List name;
}
@Controller
public class ListName {
@Autowired
private Student student;//将Student对象注入
@PostConstruct
public void PostConstruct () {
System.out.println(student.getName());
}
}