spring boot學習簡要筆記1

key.l666發表於2020-10-31

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其他的實現

相關文章