Spring Boot and Cloud part4
1、build.gradle文件
buildscript {
ext{
springBootVersion = '2.3.1.RELEASE'
}
repositories {
maven{
url 'https://repo.spring.io/release'
}
mavenCentral()
}
dependencies {
classpath(
"org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}",
"io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE"
)
}
}
apply{
plugin("java")
plugin("maven")
plugin("idea")
plugin("org.springframework.boot")
plugin("io.spring.dependency-management")
}
group 'org.example'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
targetCompatibility = 1.8
repositories {
maven{
url 'https://repo.spring.io/release'
}
mavenCentral()
}
dependencies {
compile(
"org.springframework.boot:spring-boot-starter-web",
"org.springframework.boot:spring-boot-loader"
)
}
其中:
dependencies {
classpath(
"org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}",
"io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE"
)
里的
"org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"插件提供一些Springboot使用的一些插件。
“io.spring.gradle:dependency-management-plugin:1.0.9.RELEASE” 插件是一些依赖管理,例如添加不指定版本号的依赖
2、application.yml中自定义的配置(简单方式)
application.yml文件中配置自定义配置
myConfig:
myObject:
myName: zhangsan
myAge: 20
可以在控制器中使用@value注解进行获取值
例如:
public class MyController {
@Value("${myConfig.myObject.myName}")
private String myName;
@Value("${myConfig.myObject.myAge}")
private int myAge;
}
其中的@Value注解则是获取上文中application.yml中自定义的配置
3、@Configuration
@Configuration注解是表明这是一个配置类
例如:
存在一个MyConfigBean类
public class MyConfigBean {
@Value("${myConfig.myObject.myName}")
private String myName;
@Value("${myConfig.myObject.myAge}")
private String myAge;
public String getMyName() {
return myName;
}
public void setMyName(String myName) {
myName = myName;
}
public String getMyAge() {
return myAge;
}
public void setMyAge(String myAge) {
myAge = myAge;
}
}
使用@Configuration注解是表明这是一个配置类
@Configuration
public class MyConfig {
@Bean
public MyConfigBean myConfigBean(){
return new MyConfigBean();//返回一个MyConfig对象
}
}
4、@Autowired
@Autowired注解表明让springboot自动装配这个类
@RestController
@RequestMapping(value = "/api", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public class MyController {
@Value("${myConfig.myObject.myName}")
private String myName;
@Value("${myConfig.myObject.myAge}")
private int myAge;
@Autowired
private MyConfigBean myConfigBean;
@RequestMapping(value = "/person", method = RequestMethod.GET)
public Person getPerson(){
Person person=new Person();
person.setId(25);
person.setName("张三");
person.setBirthaday(new Date());
System.out.println(this.myName);
System.out.println(this.myAge);
return person;
}
}
注意:此时会出现Connot found autowired的异常,这是由于idea的命名纠错机制问题,在spring boot 2.0后可以在DAO层加上@Repository注解解决此错误(也有可能是在Config中没有加上@Bean注解的问题),要注意,@Repository注解与@Bean注解不可以同时存在,二者存在其一即可解决问题
5、@Bean
@Configuration
public class MyConfig {
@Bean
public MyConfigBean myConfigBean(){
return new MyConfigBean();//返回一个MyConfig对象
}
}
其中@Bean注解表明这是一个spring boot管理的bean对象,没有@Bean注解则无法自动装配
6、“org.springframework.boot:spring-boot-loader”
此包一般只做为一个插件使用就好,并不需要做为一个依赖级别放在compile中,其作用是用于将项目工程打为可运行的jar包
compile(
"org.springframework.boot:spring-boot-starter-web",
"org.springframework.boot:spring-boot-loader" //可以不需要添加此依赖
)