最近在GitHub看到一个系统学习Spring Boot的项目,想到自己基础有点薄弱,重新学习一下吧,go!
一、开启Spring Boot
构建项目的方式有很多,这里我用的是使用 http://start.spring.io/ 来构建一个简单的Spring Boot项目。
选择自己需要的Spring版本,生成jar包还是war包的方式,JDK的版本等等
有一些依赖可以选
最后点击 GENERATE 可下载生成好的项目压缩包,解压出来就可以用了
然后用IDEA导入打开,第一次导入会下载比较多依赖,比较慢
直接在启动类编写一个入口,(正常情况下应该在controller里面写),这里偷懒
代码语言:javascript复制
@RestController
@SpringBootApplication
public class SpringdemoApplication {
@RequestMapping("/")
String index() {
return "hello spring boot";
}
public static void main(String[] args) {
SpringApplication.run(SpringdemoApplication.class, args);
}
}
启动项目
访问 http://localhost:8080/
打包的话
完成后得到jar包
可以在本地用控制台用命令直接启动
代码语言:javascript复制java -jar springdemo-0.0.1-SNAPSHOT.jar
二、一些基础配置
1. 启动banner图案
Spring Boot项目在启动的时候会有一个默认的启动图案
这个banner可以自己定制,也可以关闭不显示
(1)设置的话可以把这个图案修改为自己想要的。在src/main/resources目录下新建banner.txt文件,然后将自己的图案黏贴进去即可。ASCII图案可通过网站 http://www.network-science.de/ascii/ 进行生成。
(2)关闭的话,在启动类进行设置,将 BannerMode 设置为 OFF
代码语言:javascript复制 public static void main(String[] args) {
SpringApplication app = new SpringApplication(SpringdemoApplication.class);
app.setBannerMode(Banner.Mode.OFF);
app.run(args);
}
2. 全局配置文件
在src/main/resources目录下,Spring Boot提供了一个名为application.properties的全局配置文件,可对一些默认配置的配置值进行修改。
Spring Boot允许我们在application.properties下自定义一些属性,比如:
代码语言:javascript复制lixj.blog.name=mrbird's blog
lixj.blog.title=Spring Boot
定义一个BlogProperties Bean,通过@Value("${属性名}")来加载配置文件中的属性值
代码语言:javascript复制@Component
@Data
public class BlogPropertiesBean {
@Value("${lixj.blog.name}")
private String name;
@Value("${lixj.blog.title}")
private String title;
}
代码语言:javascript复制这里可以引入 lombok 插件,可以省略set和get方法方法如下:
(1)IDEA按照 lombok 插件,教程bing搜索
(2)在pom.xml引入依赖
(3)使用时在类上加 @Data 注解,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
编写IndexController,注入该Bean:
代码语言:javascript复制@RestController
public class IndexController {
@Autowired
private BlogPropertiesBean blogPropertiesBean;
@RequestMapping("/test")
String idnex() {
return blogPropertiesBean.getName() "," blogPropertiesBean.getTitle();
}
}
如果直接启动后,访问 http://localhost:8080/test 会有报错
这里要在启动类加上包的路径,否则无法扫描到
配置好后重新启动后再访问 http://localhost:8080/test 就正常了
在属性非常多的情况下,也可以定义一个和配置文件对应的Bean:
代码语言:javascript复制@Data
@ConfigurationProperties(prefix = "lixj.blog")
public class ConfigBean {
private String name;
private String title;
private String wholeTitle;
}
通过注解@ConfigurationProperties(prefix="lixj.blog")指明了属性的通用前缀,通用前缀加属性名和配置文件的属性名一一对应。
除此之外还需在Spring Boot入口类加上注解@EnableConfigurationProperties({ConfigBean.class})来启用该配置:
代码语言:javascript复制@RestController
@SpringBootApplication
@EnableConfigurationProperties({ConfigBean.class})
@ComponentScan(basePackages = {"com.example.lixj"})
public class SpringdemoApplication {
@RequestMapping("/")
String index() {
return "hello spring boot";
}
public static void main(String[] args) {
SpringApplication.run(SpringdemoApplication.class, args);
}
}
之后便可在IndexController中注入该Bean,并使用了:
代码语言:javascript复制@RestController
public class IndexController {
@Autowired
private BlogPropertiesBean blogPropertiesBean;
@Autowired
private ConfigBean configBean;
@RequestMapping("/test")
String idnex() {
return blogPropertiesBean.getName() "," blogPropertiesBean.getTitle();
}
@RequestMapping("/test1")
String index1() {
return configBean.getName() "," configBean.getTitle() "<br/>" configBean.getWholeTitle();
}
}
属性间的引用 在application.properties配置文件中,各个属性可以相互引用,如下:
代码语言:javascript复制lixj.blog.name=LIXJ
lixj.blog.title=I'm so hard
lixj.blog.wholeTitle=${lixj.blog.name}--${lixj.blog.title}
3.自定义配置
除了可以在application.properties里配置属性,我们还可以自定义一个配置文件。在src/main/resources目录下新建一个test.properties:
代码语言:javascript复制test.name=Lixj
test.age=18
定义一个对应该配置文件的Bean:
代码语言:javascript复制@Data
@Configuration
@ConfigurationProperties(prefix = "test")
@PropertySource("classpath:test.properties")
@Component
public class TestConfigBean {
private String name;
private int age;
}
注解@PropertySource("classpath:test.properties")指明了使用哪个配置文件。要使用该配置Bean,同样也需要在入口类里使用注解@EnableConfigurationProperties({TestConfigBean.class})来启用该配置。
5.通过命令行设置属性值
在运行Spring Boot jar文件时,可以使用命令java -jar xxx.jar --server.port=8081来改变端口的值。这条命令等价于我们手动到application.properties中修改(如果没有这条属性的话就添加)server.port属性的值为8081。
如果不想项目的配置被命令行修改,可以在入口文件的main方法中进行如下设置:
代码语言:javascript复制 public static void main(String[] args) {
SpringApplication app = new SpringApplication(SpringdemoApplication.class);
app.setBannerMode(Banner.Mode.OFF);
app.setAddCommandLineProperties(false);
app.run(args);
}
修改端口也可以配置在 application.properties server.port=8081
使用xml配置 虽然Spring Boot并不推荐我们继续使用xml配置,但如果出现不得不使用xml配置的情况,Spring Boot允许我们在入口类里通过注解@ImportResource({"classpath:some-application.xml"})来引入xml配置文件。
6.Profile配置
Profile用来针对不同的环境下使用不同的配置文件,多环境配置文件必须以application-{profile}.properties的格式命,其中{profile}为环境标识。比如定义两个配置文件:
application-dev.properties:开发环境
server.port=8080
application-prod.properties:生产环境
server.port=8081
至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
如:spring.profiles.active=dev就会加载application-dev.properties配置文件内容。可以在运行jar文件的时候使用命令java -jar xxx.jar --spring.profiles.active={profile}切换不同的环境配置。
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://lixj.fun/archives/springboot学习-初始化项目及一些基础配置