1.resource文件夹下的目录结构
static:静态资源:js,css,images
templates:保存模板页面(例如:spring boot默认jar包使用嵌入式的tomcat,所以是不支持jsp的,但可以使用模板引擎)
application.properties:spring boot应用的配置文件yaml,properties
2.配置文件
spring boot默认有application.properties,application.yaml两个为全局配置文件,用于修改spring boot在底层给我们默认配置好的一些默认值
yaml以数据为中心,比json、xml更适合作为配置文件
yaml:
server:
port: 8081
xml:
<server>
<port>8081</port>
</server>
使用yaml配置文件可以向我们的Javabean配置基本值
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Date brith;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
}
person:
lastName: key.l
age: 18
brith: 2019/10/24
maps: {k1: v1,k2: v2}
list:
-1
-2
dog:
name: dog
age: 1
这里需要注意的点是,使用@ConfigurationProperties这个注解的时候我们应该需要一个spring-boot-configuration-processor的驱动,需要这个驱动来从配置文件中获取配置的值。
然后在spring boot 的test文件夹里面进行测试。就可以了,这下面是我的控制台打印信息
Person{lastName='key.l', age=18, brith=Thu Oct 24 00:00:00 CST 2019, maps={k1=v1, k2=v2}, list=[-1 -2], dog=Dog{name='dog', age=1}}
同样能实现注册的还有@Value,例如
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {
@Value(${SpEL})
private String lastName;
private Integer age;
private Date brith;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
}
但是@Value相对于@ConfigurationProperties的缺点是不支持JR303数据校验和松散绑定。并且最致命的是复杂类型的封装问题会十分麻烦
总结:
如果只是在业务逻辑中用到一下值,我们可以用value来进行赋值
如果我们用专门的Javabean对象与配置文件进行映射,最好是用configurationproperties
3.@PropertySource和@ImportResource
@PropertySource:加载指定配置文件
@ImportResource:导入我们的spring的配置文件,让配置文件的内容生效,springboot里面没有包括spring的配置文件,也无法自动识别,想让spring的配置文件就需要用importResource导入进来。把@ImportResource标记在主配置类上面。
新建一个HelloService类后我们写一个xml配置一下测试
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="helloService" class="com.cheerful.springboot.service.HelloService"/>
</beans>
@Autowired
ApplicationContext ioc;
@Test
public void test(){
boolean helloService = ioc.containsBean("helloService");
System.out.println(helloService);
}
打印的是false
@ImportResource({"classpath:beans.xml"})
把这行代码加到spring boot主类上面,已导入beans.xml的spring配置文件。
然后spring boot推荐的方式是全注解的形式进行开发;
所以这里我们就可以用写一个配置类的方式来代替配置文件。
@Configuration
public class MyAppConfig {
//将方法的返回值返回到容器中去,容器中组件默认的id就是方法名
@Bean
public HelloService helloService(){
return new HelloService();
}
}
4.profile
profile是spring对不同环境提供不同配置功能的支持,可以以激活、指定参数等方式来快速的切换环境
1.yaml
server:
port: 8081
spring:
profiles:
active: dev
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles: product
2.多profile文件形式:
application-{profile}.properties;
3.命令行,配置文件,虚拟机激活
命令行–spring.profiles.active=dev
配置文件spring.profiles.active=dev
虚拟机-Dspring.profiles.active=dev
5.配置文件加载位置
spring boot启动会扫描这些位置的application.yaml或者properties作为配置文件。
file的config目录或者根目录,classpath的config目录或者根目录。并且优先级由先后顺序覆盖相同的配置信息,不同的配置信息进行互补配置。
我们以可以通过spring.config.location更改默认配置
以及通过jar包外,包内的配置文件都是可以的
6.SLF4J的使用
开发的时候,日志方法的调用应该调用抽象层的方法,而不是直接调用实现类里面的
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
2.如何让系统中其他的日志框架都移到slf4j:
将系统中其他的日志框架排除,再用中间包来替换原有的日志框架,在导入slf4j其他的实现