Spring Boot:注解、異常、配置

概述

  • Spring Boot它簡化了配置,內(nèi)嵌式tomcat容器,用于快速開發(fā)基于Spring的應用,是一個微框架

配置

  • 添加application.properties(可xml或yml)文件,除了配置數(shù)據(jù)庫連接、日志等外,還可以添加屬性,然后通過 @Value("${屬性名}") 注解來加載對應的屬性:
com.didispace.blog.name=程序猿DD
com.didispace.blog.title=Spring Boot教程
@Component
public class BlogProperties {

    @Value("${com.didispace.blog.name}")
    private String name;
    @Value("${com.didispace.blog.title}")
    private String title;

    // 省略getter和setter

}
  • 參數(shù)間也可以互相引用:
com.didispace.blog.name=程序猿DD
com.didispace.blog.title=Spring Boot教程
com.didispace.blog.desc=${com.didispace.blog.name}正在努力寫《${com.didispace.blog.title}》
  • 也可以使用隨機數(shù):
# 隨機字符串
com.didispace.blog.value=${random.value}
# 隨機int
com.didispace.blog.number=${random.int}
# 隨機long
com.didispace.blog.bignumber=${random.long}
# 10以內(nèi)的隨機數(shù)
com.didispace.blog.test1=${random.int(10)}
# 10-20的隨機數(shù)
com.didispace.blog.test2=${random.int[10,20]}
  • 可以通過:java -jar xxx.jar -- server.port = 8888 設置端口,-- 后面就是對應配置文件中的值,可以通過 SpringApplication.sendAddCommandLineProperties(false) 屏蔽命令行訪問屬性

多環(huán)境配置

  • Spring Boot多環(huán)境配置文件名需要滿足 application-{profile}.properties 格式,如:

    application-dev.properties:開發(fā)環(huán)境
    application-test.properties:測試環(huán)境
    application-prod.properties:生產(chǎn)環(huán)境

  • 然后在配置文件中通過 spring.profiles.active 屬性設置生產(chǎn)環(huán)境,如:

    spring.profiles.active = test

注解

  • @SpringBootApplication:等于 @Configuration + @EnableAutoConfiguration + @ComponentScan
  • @RestController:是注解@Controller和@ResponseBody的結(jié)合,默認返回JSON
  • @Configuration:注解在類上,標記該類是一個配置類
  • @EnableAutoConfiguration:注解在配置類上、根據(jù)導入@EnableConfigServer的包自動配置 Spring Boot
  • @ComponentScan:注解在配置類上,掃描指定包下的所有類,將其注入IOC容器
  • @EntityScan:注解在入口類上,掃描指定包下的實體類
  • @ControllerAdvice:聲明統(tǒng)一異常處理類
  • @ExceptionHandler:注解在方法上,聲明對哪些異常進行處理
  • @Primary:注解在類上,當某個接口有多個實現(xiàn)類,通過 @Autowired 注入時,若不指定使用實現(xiàn)類,會優(yōu)先使用該類進行注入
  • @EnableAutoConfiguration:注解在類上,讓 spring boot 根據(jù)依賴項對 spring 進行自動配置,如添加了 spring-boot-starter-web 則配置 SpringMVC
  • @GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping:簡化HTTP方法映射,更好的表達注解方法語義
  • @Import:可用于導入配置類,或普通 Java 類并將其聲明為 Bean
  • @ConditionalOnProperty:該注解能夠控制某個 configuration 是否生效,它得 name 屬性用來從配置文件中讀取某個值,如果該值為空,則返回 false,否則將與 havingValue 指定的值進行比較,一樣則返回 true,否則 false,若返回 false,該 configuration 不生效
@Configuration
//如果synchronize在配置文件中并且值為true
@ConditionalOnProperty(name = "synchronize", havingValue = "true")
public class SecondDatasourceConfig {

    @Bean(name = "SecondDataSource")
    @Qualifier("SecondDataSource")
    @ConfigurationProperties(prefix = "spring.second.datasource")
    public DataSource jwcDataSource() {
        return DataSourceBuilder.create().build();
    }
}
  • @Order:控制配置類的加載順序
@Configuration
@Order(2)
public class Demo1Config {
    @Bean
    public Demo1Service demo1Service(){
        System.out.println("demo1config 加載了");
        return new Demo1Service();
    }

}
@Configuration
@Order(1)
public class Demo2Config {

    @Bean
    public Demo2Service demo2Service(){
        System.out.println("demo2config 加載了");
        return new Demo2Service();
    }

}
輸出結(jié)果:demo2config 加載了、demo1config 加載了
  • @ConfigurationProperties:可以將配置信息自動映射到實體類上,類似@Valid
connection.username=admin
connection.password=kyjufskifas2jsfs
connection.remoteAddress=192.168.1.1
@Component
@Data
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {

    private String username;
    private String remoteAddress;
    private String password ;

}

異常處理返回JSON

  1. 創(chuàng)建返回的JSON對象:code(消息類型),message(消息內(nèi)容),url(請求url),data(請求返回數(shù)據(jù))
public class ErrorInfo<T> {

    public static final Integer OK = 0;
    public static final Integer ERROR = 100;

    private Integer code;
    private String message;
    private String url;
    private T data;

    // 省略getter和setter

}
  1. 創(chuàng)建自定義異常類
public class MyException extends Exception {

    public MyException(String message) {
        super(message);
    }
    
}
  1. 捕獲異常進行處理
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(value = MyException.class)
    @ResponseBody
    public ErrorInfo<String> jsonErrorHandler(HttpServletRequest req, MyException e) throws Exception {
        ErrorInfo<String> r = new ErrorInfo<>();
        r.setMessage(e.getMessage());
        r.setCode(ErrorInfo.ERROR);
        r.setData("Some Data");
        r.setUrl(req.getRequestURL().toString());
        return r;
    }

}
@Controller
public class HelloController {

    @RequestMapping("/json")
    public String json() throws MyException {
        throw new MyException("發(fā)生錯誤2");
    }

}

Spring Boot配置:

spring.jpa.hibernate.naming.physical-strategy:Spring JPA命名策略配置

  • org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl(無修改命名)
  • org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy(駝峰命名)

spring.application.name:微服務應用程序名

server.context-path = /myspringboot:項目 contextPath 配置

server.error.path = /error:錯誤頁配置

server.port = 9090:端口配置

server.session-timeout = 60:sesssion超時時間分鐘

server.address = 192.168.16.11:綁定服務器IP,若啟動時本機 IP 不一致拋異常

server.tomcat.max-threads = 800:tomcat最大線程數(shù),默認200

server.tomcat.uri-encoding = UTF-8:tomcat的URI編碼

server.tomcat.basedir = H:/springboot-tomcat-tmp:tomcat日志保存文件就

logging.path = H:/springboot-tomcat-tmp:日志文件目錄

logging.file = myapp.log:日志文件名字

spring.datasource.url=jdbc:mysql://localhost:3306/testsql?useSSL=false:數(shù)據(jù)庫url配置

spring.datasource.username=root:數(shù)據(jù)庫用戶名配置

spring.datasource.password=123456ly:數(shù)據(jù)庫密碼配置

spring.jpa.show-sql=true:顯示sql語句進行調(diào)試

spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect:SQL方言

spring.jpa.hibernate.ddl-auto=create:自動創(chuàng)建表、更新等

management.security.enabled=false:是否啟用security

security.user.name:指定默認的用戶名,默認為user

security.user.password:默認的用戶密碼

security.user.role:默認用戶的授權(quán)角色

security.basic.enabled:是否看起鑒權(quán),默認 true

spring.http.multipart.maxFileSize:單個文件最大大小

spring.http.multipart.maxRequestSize:總上傳的數(shù)據(jù)最大大小

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容