概述
- 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
- 創(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
}
- 創(chuàng)建自定義異常類
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
- 捕獲異常進行處理
@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:總上傳的數據最大大小