复制工程
step1
在文件夹中复制一个模块,删除至只剩src和pom
step2
修改pom中的artifactId为模块名
step3
导入模块
修改端口号
在application.properties文件中增加server.port
使用80端口时访问路径可以不加端口号
http;//localhost/users
认识一下其他配置
spring.main.banner-mode=off spring.banner.image.location=fire.png logging.level.root=info
第一个控制启动springboot时的logo是否打印在控制台
第二个可以自己定义logo,可以是图片
第三个设置日志的提示等级
这些配置是关联着服务器配置的,如果starter类没有了,这些配置就不能被识别出来了
也就是说这个配置怎么写是看你用的什么技术。
通过官方查找所有的配置
springboot配置文件的类型
yml配置文件是主流
配置文件加载优先级
通过给三个配置文件设置不同的端口号,检查启动时用的哪个端口号来判断配置文件加载的优先级
properties > yml > yaml
假如你维护的程序中使用的配置文件是properties,那么你要是配yml配置文件就没有用了
不同配置文件的配置内容如果不相同的话会叠加,假如properties配置端口号,yml配置日志,则会同时产生效果,只有相同的属性才会产生覆盖问题。
YAML数据格式
YAML(YAML Ain't Markup Language) yaml是和XML,properties作用一样的数据格式,含义是非标记语言。
YAML格式数据的文件拓展名可以是yml或yaml,通常用yml
YAML格式容易阅读,以数据为核心,重数据轻格式
YAML语法规则
#单个键值对 user: oo #对象格式 users: name: zz age: 18 #数组格式 users0: -zz -cc -ll users00: [zz,cc,ll] #数组格式 users1: -name: cc -age: 19 users11: [name: cc,age: 19] #数组对象格式 user2: - name: cc age: 20 - name: ll age: 21 users22: [{name: cc,age: 20},{name: ll,age: 21}]
yaml数据的读取
@RestController @RequestMapping("/books") public class BookController { //获取单个数据 @Value("${user}") private String user;//00 @Value("${users.age}") private String age; //18 @Value("${users00[0]}") //zz private String num1; @Value("${users22[0].name}") private String name2; @GetMapping public String getById(){ System.out.println(user); System.out.println(age); System.out.println(num1); System.out.println(name2); return "springboot"; } }
yaml文件中的变量引用
写的数据之间需要相互引用
yaml支持转移字符,但需要用引号包起来
/t = 空格
输出 c:\user 242
yaml文件中的变量引用
yaml文件中有多少配置变量,读取配置信息时就需要创建多少变量,如何解决这个问题?
boot提供了一个属性可以把所有的变量全加载
@RestController @RequestMapping("/books") public class BookController { @Autowired Environment environment; @GetMapping public String getById(){ System.out.println(environment.getProperty("user")); return "springboot"; } }
读取yaml引用类型属性数据
Environment将所有的数据都封装了,调用时还得是需要记住属性名,能不能只封装对于我们来说有用的数据呢?
step1:定义数据模型封装在yaml文件中
2.定义spring管理的bean
@Component //指定加载的数据 @ConfigurationProperties("datasource")//这里不知道是什么原因不能用dataSource,只能用datasource public class Datasource { private String driver; private String url; private String username; private String password; public Datasource() { } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "DataSource{" + "driver='" + driver + '\'' + ", url='" + url + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
@RestController @RequestMapping("/books") public class BookController { @Autowired Datasource myDataSource; @GetMapping public String getById(){ System.out.println(myDataSource.getDriver()); return "springboot"; } }
其实tomcat就是通过这种方式往日志里面读取信息,将你配置的信息封装为一个对象,然后在你的程序中将这个对象声明就能引用你配置的内容。
context-path是上下文路径
容器怎么调用你配置的信息呢?定义某个类,加载配置信息为一个对象,然后读取