中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot屬性配置中獲取值的方式是什么

發布時間:2022-02-14 13:38:41 來源:億速云 閱讀:172 作者:iii 欄目:開發技術

這篇文章主要介紹“SpringBoot屬性配置中獲取值的方式是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“SpringBoot屬性配置中獲取值的方式是什么”文章能幫助大家解決問題。

SpringBoot 屬性配置中獲取值

在配置文件中定義屬性的值,然后再獲取,在這里做一個總結,首先,在application.yml文件中定義端口和屬性的值,當然,在.application.properties文件中也能定義,只是格式不同而已:

appliaction.yml:

server:
  port: 8081
cubSize: B
age: 18

然后再定義一個controller,用@Value這個注解來獲取到值:

package com.dist.tr.controller;
import com.dist.tr.entity.GrilProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
public class BeautifulGirlContrller {
    @Value("${cubSize}")
    private String cubSize;
    @Value("${age}")
    private Integer age;
    @RequestMapping(value = "/gril",method = RequestMethod.GET)
    public String HelloGril(){
        return cubSize + age;
    }
}

運行結果:

SpringBoot屬性配置中獲取值的方式是什么

如果當屬性很多之后,要寫很多的@Value 的注解嘛???答案當然是No,有簡便的寫法:

application.yml 文件

server:
  port: 8081
gril:
  name: lisa
  height: 165

首先,定義一個實體類去寫屬性

GrilProperties實體:

注意我們用到了這個注解:@ConfigurationProperties(prefix = “gril”)

package com.dist.tr.entity;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "gril")
public class GrilProperties {
    private String name;
    private String height;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getHeight() {
        return height;
    }
    public void setHeight(String height) {
        this.height = height;
    }
}

在controller 中的寫法:

首先用注解@Autowired 注入這個實體,如果不在實體中加@Component這個注解,在idea中發現會有紅線出現。

package com.dist.tr.controller;
import com.dist.tr.entity.GrilProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
public class BeautifulGirlContrller {
    @Autowired
    private GrilProperties grilProperties;
    @RequestMapping("/grilPerproties")
    public String grilPerproties(){
        return grilProperties.getName()+grilProperties.getHeight();
    }
}

運行結果:

SpringBoot屬性配置中獲取值的方式是什么

這樣就不會需要去寫太多的@Value注解了。

還有中形式,就是在配置文件中也可以有這種情況出現:

server:
  port: 8081
cubSize: B
age: 18
context: "cubSize:${cubSize},age:${age}"

這種情況證明獲取的屬性值呢?

在controller中編碼:

package com.dist.tr.controller;
import com.dist.tr.entity.GrilProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping
public class BeautifulGirlContrller {
    @Value("${context}")
    private String context;
    @RequestMapping("/grilSize")
    public String girlcubSize(){
        return context ;
    }
}

運行結果:

SpringBoot屬性配置中獲取值的方式是什么

測試和生產區分

當在項目開發的時候,如果區分測試和生產環境,那么就得區分開application.yml 文件:

新建application-dev.yml 文件和application-prod.yml文件:

然后在使用測試或者是生產的時候,application.yml 文件中這樣寫:

spring:
  profiles:
    active: prod

決定是用測試環境還是生產環境。

SpringBoot 獲取值和配置文件

@ConfigurationProperties、@Value、@PropertySource、@ImportResource和@Bean

1、@ConfigurationProperties(prefix = "student")方式

(1)定義兩個實體類,其中student實體類的屬性包括Course類:

@Data
@Component
@ConfigurationProperties(prefix = "student")//告訴springboot將本類中的所有屬性和配置文件的相關配置進行綁定
public class Student {       //prefix:配置文件中哪一個名稱下面的屬性進行一一映射
    private String sname;
    private int age;
    private Map<String,Object> maps;
    private List<Object> list;
    private Course course;
}
@Data
public class Course {
    private String courseno;
    private String coursename;
}

(2)創建yaml配置文件:

student:
  sname: zhai
  age: 12
  maps: {k1: 12,k2: 13}
  list:
    - zhai
    - zhang
  course:
    courseno: 202007
    coursename: javaweb

(3)創建properties文件:

#配置student
student.age=12
student.sname=zhai
student.maps.k1=1
student.maps.k2=2
student.list=a,b,c
student.course.courseno=202007
student.course.coursename=java

(4)測試類:

//可以在測試期間很方便地類似編碼一樣進行自動注入等容器的功能
@SpringBootTestclass Springboot03ApplicationTests {
    @Autowired
    Student student;
    @Test
    void contextLoads() {
        System.out.println(student);
    }
}

(5)需要導入的依賴:配置文件處理器,配置文件進行綁定會有提示

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.2.1.RELEASE</version>
   </dependency>

SpringBoot屬性配置中獲取值的方式是什么

2、@Value方式

(1)書寫配置文件

#配置student
student.sname=zhai
student.age=12
student.maps.k1=1
student.maps.k2=2
student.list=a,b,c
student.course.courseno=202007
student.course.coursename=java

(2)獲取值:

@Data
@Component
public class Student {
    @Value("${student.sname}")
    private String sname;
    @Value("#{2*9}")
    private int age;
    private Map<String,Object> maps;
    private List<Object> list;
    private Course course;
}

(3)@ConfigurationProperties(prefix = "")方式與@Value方式的比較

  • @ConfigurationProperties(prefix = "")方式支持批量注入配置文件的屬性,@Value方式需要一個個指定

  • @ConfigurationProperties(prefix = "")方式支持松散綁定,@Value方式不支持,

yml中寫的last-name,這個和lastName是一樣的,后面跟著的字母默認是大寫的。這就是松散綁定

@Value方式支持JSR303校驗

@Data
@Component
@Validated
public class Student {
    @NonNull
    private String sname;
    private int age;
    private Map<String,Object> maps;
    private List<Object> list;
    private Course course;
}

@Value方式支持SpEl

如果我們只是在某一個業務邏輯中需要獲取配置文件的某一項值,可以使用@Value,如果是一個javaBean來和配置文件進行映射,則要使用@ConfigurationProperties(prefix = "")方式

@RestController
public class HelloController {
    @Value("${student.sname}")
    private String sname;
    @RequestMapping("/hello")
    public String hello(){
        return "hello"+sname;
    }
}

配置文件:

#配置student
student.sname=zhai
student.age=12
student.maps.k1=1
student.maps.k2=2
student.list=a,b,c
student.course.courseno=202007
student.course.coursename=java

3、@PropertySource

(1)配置文件(student.properties)

#配置student
student.sname=zhai
student.age=12
student.maps.k1=1
student.maps.k2=2
student.list=a,b,c
student.course.courseno=202007
student.course.coursename=java

(2)實體類獲取值

@Data
@Component
@PropertySource(value = {"classpath:student.properties"})
public class Student {
    private String sname;
    private int age;
    private Map<String,Object> maps;
    private List<Object> list;
    private Course course;
}

@PropertySource是從指定路徑下獲取數據,默認是從application.properties下獲取數據

4、@ImportResource和@Bean

(1)指定spring的配置文件

@SpringBootApplication(scanBasePackages = "com")
@ImportResource(locations = {"classpath:beans.xml"})
public class Springboot02Application {
    public static void main(String[] args) {
        SpringApplication.run(Springboot02Application.class, args);
    }
}

(2)書寫spring的配置文件:beans.xml

(3)書寫如下配置,可以省略配置文件的書寫,用注解來代替

@Configuration
public class MyAppConfig {
    @Bean
    public HelloService helloService(){
        return new HellService();
    }
}

@Configuration說明這是一個配置類,就是在替代之前的配置文件

@Bean標記在方法上,該方式將方法的返回值添加到容器中,容器中組件的ID默認是方法名

關于“SpringBoot屬性配置中獲取值的方式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漾濞| 南郑县| 收藏| 通江县| 和田县| 桐柏县| 金川县| 右玉县| 商都县| 外汇| 赫章县| 西林县| 武冈市| 敦化市| 奉贤区| 商都县| 襄樊市| 军事| 永丰县| 景宁| 洛隆县| 霍州市| 靖西县| 通海县| 横山县| 洛南县| 布尔津县| 崇明县| 勃利县| 磴口县| 太湖县| 新密市| 蓝山县| 奉新县| 法库县| 轮台县| 尼玛县| 东阿县| 衢州市| 吴桥县| 雅安市|