Spring Boot:注解阳液、異常、配置

概述

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

配置

  • 添加application.properties(可xml或yml)文件畸陡,除了配置數據庫連接鹰溜、日志等外,還可以添加屬性丁恭,然后通過 @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

}
  • 參數間也可以互相引用:
com.didispace.blog.name=程序猿DD
com.didispace.blog.title=Spring Boot教程
com.didispace.blog.desc=${com.didispace.blog.name}正在努力寫《${com.didispace.blog.title}》
  • 也可以使用隨機數:
# 隨機字符串
com.didispace.blog.value=${random.value}
# 隨機int
com.didispace.blog.number=${random.int}
# 隨機long
com.didispace.blog.bignumber=${random.long}
# 10以內的隨機數
com.didispace.blog.test1=${random.int(10)}
# 10-20的隨機數
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:生產環(huán)境

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

    spring.profiles.active = test

注解

  • @SpringBootApplication:等于 @Configuration + @EnableAutoConfiguration + @ComponentScan
  • @RestController:是注解@Controller和@ResponseBody的結合,默認返回JSON
  • @Configuration:注解在類上第献,標記該類是一個配置類
  • @EnableAutoConfiguration:注解在配置類上贡必、根據導入@EnableConfigServer的包自動配置 Spring Boot
  • @ComponentScan:注解在配置類上,掃描指定包下的所有類痊硕,將其注入IOC容器
  • @EntityScan:注解在入口類上赊级,掃描指定包下的實體類
  • @ControllerAdvice:聲明統(tǒng)一異常處理類
  • @ExceptionHandler:注解在方法上,聲明對哪些異常進行處理
  • @Primary:注解在類上岔绸,當某個接口有多個實現(xiàn)類理逊,通過 @Autowired 注入時,若不指定使用實現(xiàn)類盒揉,會優(yōu)先使用該類進行注入
  • @EnableAutoConfiguration:注解在類上晋被,讓 spring boot 根據依賴項對 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();
    }

}
輸出結果: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(消息內容)第晰,url(請求url),data(請求返回數據)
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最大線程數但荤,默認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:數據庫url配置

spring.datasource.username=root:數據庫用戶名配置

spring.datasource.password=123456ly:數據庫密碼配置

spring.jpa.show-sql=true:顯示sql語句進行調試

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:默認用戶的授權角色

security.basic.enabled:是否看起鑒權,默認 true

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

spring.http.multipart.maxRequestSize:總上傳的數據最大大小

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末桑包,一起剝皮案震驚了整個濱河市南蓬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哑了,老刑警劉巖赘方,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異弱左,居然都是意外死亡窄陡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門拆火,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跳夭,“玉大人,你說我怎么就攤上這事们镜”姨荆” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵模狭,是天一觀的道長颈抚。 經常有香客問我,道長嚼鹉,這世上最難降的妖魔是什么贩汉? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮锚赤,結果婚禮上匹舞,老公的妹妹穿的比我還像新娘。我一直安慰自己宴树,他們只是感情好策菜,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般又憨。 火紅的嫁衣襯著肌膚如雪翠霍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天蠢莺,我揣著相機與錄音寒匙,去河邊找鬼。 笑死躏将,一個胖子當著我的面吹牛锄弱,可吹牛的內容都是我干的。 我是一名探鬼主播祸憋,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼会宪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蚯窥?” 一聲冷哼從身側響起掸鹅,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拦赠,沒想到半個月后巍沙,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡荷鼠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年句携,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片允乐。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡矮嫉,死狀恐怖,靈堂內的尸體忽然破棺而出牍疏,到底是詐尸還是另有隱情敞临,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布麸澜,位于F島的核電站挺尿,受9級特大地震影響,放射性物質發(fā)生泄漏炊邦。R本人自食惡果不足惜编矾,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望馁害。 院中可真熱鬧窄俏,春花似錦、人聲如沸碘菜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至仰坦,卻和暖如春履植,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悄晃。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工玫霎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妈橄。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓庶近,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眷蚓。 傳聞我的和親對象是個殘疾皇子鼻种,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345