---
# System prepended metadata

title: 'Spring Boot課程筆記5: 自定義配置'
tags: [Spring Boot]

---

# Spring Boot課程筆記5: 自定義配置
## 配置文件
### 透過文件進行相關配置的設定
* **application.properties**
  -Spring Boot預設的設置文件
  -於文件中進行客製化的定義，如下圖範例
  ![](https://i.imgur.com/7cKfwO3.jpg)

* **application.yml**
  -另種設定檔，透過Json格式撰寫，較常用此種方式設定Spring Boot，可參考下方範例(設置內容皆與上方properties檔相同，可用以進行對比)  
  ![](https://i.imgur.com/4kMlI3N.jpg)
## 自定義屬性配置
### 可於yaml內依照各專案需求配置客製屬性
* **透過@Value注解以及參數${}的方式於類別中引入客製屬性，且也可於文件中使用相同方式交互設定，如下圖所示**
  ![](https://i.imgur.com/SR7vxIR.jpg)
  *HelloController.java*
  ```
       @Value("${book.name}")
        private String name;

        @Value("${book.author}")
        private String author;

        @Value("${book.isbn}")
        private String isbn;

        @Value("${book.description}")
        private String description;
        
        @GetMapping("/books/{id}")
        public Object getOne(@PathVariable long id) {
            Map<String, Object> book = new HashMap<>();
            book.put("name", name);
            book.put("isbn", isbn);
            book.put("author", author);
            book.put("description", description);

            return book;
        }
  ```
* **透過實體類別接收客製屬性**
  -藉由@ConfigurationProperties於實體類別中引入相對應的自定義屬性，且藉由@Component標注該類別為元件作為使用，並於原本欲引入的類別中透過@Autowired注入類別，下方為範例
  ![](https://i.imgur.com/N7VviwJ.jpg)
  *Book.java*
  ```
    @Component
    @ConfigurationProperties(prefix = "book")
    public class Book {

        private String name;

        private String author;

        private String isbn;

        private String description;

        public Book() {
        }

        //下方Getter Setter省略
    }
  ```
  *HelloController.java*
  ```
      public class HelloController {
        @Autowired
        private Book book;
        
        @GetMapping("/books/{id}")
        public Object getOne(@PathVariable long id) {
            return book;
        }
      }
  ```
## 多環境配置
### EX: UAT/ SIT/ PRD環境不同配置
* **新增application-{自定義參數}.yml文件來定義不同環境時所需的配置**
  -例application-uat.yml/ application-sit.yml/ application-prd.yml
  -透過原始application.yml中spring.profiles.active給予參數決定該次啟動時要執行哪個文件
  *application.yml(原始文件)*
  ![](https://i.imgur.com/kuBGmBY.jpg)
  *application-sit.yml(SIT環境文件)*
  ![](https://i.imgur.com/dZYTmOc.jpg)
  *application-prd.yml(Production環境文件)*
  ![](https://i.imgur.com/P3T6875.jpg)

  

  [參考課程Reference](https://www.udemy.com/course/spring-boot-u/)
  ###### tags: `Spring Boot`
