Spring Boot 学习(二)
前面已经提到了如何创建一个新的Spring Boot项目,现在来继续学习~继续记录~~
我们新建一个项目后,会有自动生成的一个类,我这边是SpringBootDemoApplication.java
代码如下:
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
这是项目的入口类。接下来细说注解@SpringBootApplication
它是组合了@SpringBootConfiguration、@EnableAutoConfiguration以及@ComponentScan
1、@SpringBootConfiguration依然是一个组合注解,包括@EnableAutoConfiguration及其他多个注解。类似@Configuration注解,表明这个类是一个配置类。
2、@EnableAutoConfiguration表示让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置
3、@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。 如果你有个类用@Controller注解标识了,那么,如果不加上@ComponentScan,自动扫描该controller,那么该Controller就不会被spring扫描到,更不会装入spring容器中,因此你配置的这个Controller也没有意义。@ComponentScan是一个过滤器。
类上的注解@Configuration 是最新的用注解配置spring,也就是说这是个配置文件,和原来xml配置是等效的,只不过现在用Java代码进行配置了 加上一个@Configuration注解就行了,是不是很方便,不需要那么繁琐的xml配置了,这样基于注解的配置,可读性也大大增高了。
备注:
@SpringBootApplication注解的话,系统会去入口类的同级包以及下级包中去扫描实体类,因此我们建议入口类的位置在groupId+arctifactID组合的包名下。
定制Banner
下图就是我们启动Spring Boot后会在控制台看到的spring样式的Banner:
那么现在我不喜欢了。想要修改。
1.在src/main/resources下新建一个banner.txt文档
2.通过http://patorjk.com/software/taag网站生成需要的字符,将字符拷贝到步骤1所创建的txt文档中,比如我这里为Hello Sang!生成字符,如下:
然后将样式复制到banner.txt中。重新启动项目,会看到效果:
关闭Banner
其实很简单,只需要在项目的入口类中修改成如下代码:
package com.example.springbootdemo;
import org.springframework.boot.Banner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
@SpringBootApplication
public class SpringBootDemoApplication {
public static void main(String[] args) {
//修改Banner的模式为OFF
SpringApplicationBuilder springApplicationBuilder = new SpringApplicationBuilder(SpringBootDemoApplication.class);
springApplicationBuilder.bannerMode(Banner.Mode.OFF).run(args);
// SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
配置文件
1.修改Tomcat默认端口和默认访问路径
只需要在application.properties配置文件中添加:
server.port=9090
server.context-path=/hello
原来的访问路径是:http://localhost:9090/book
现在正确的访问路径是:http://localhost:9090/hello/book
我之前一直尝试用:http://localhost:9090/hello 结果是错的!!!!因为在全局配置里面配置的是全局!!!全局是端口号后面,然后还需要再加上@RequestMapping里的value值才可以。。
其他配置
- 继续在application.properties中配置日志输出:
#日志输出
logging.file=/home/sang/workspace/log.log
logging.level.org.springframework.web=debug
- 还是在application.properties中配置全局属性:
book.author=罗贯中
book.bookName=三国演义
book.pinYin=sanguoyanyi
注意!!一般在配置文件里面中文会乱码,但我这边为什么不会呢?因为做了配置了呀~
网别人家的博文里写到,在配置文件里继续配置如下代码:
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
但是我这边即使这样做了还是会乱码~至于原因我就不懂啦~
所以最终的解决方案还是按照以下操作:
File -> Settings -> Editor -> File Encodings
然后将Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上:
我是只有这样做,然后就完全OK了,目前木有出现什么问题~
接下来添加Book实体类:
添加相对应的属性并提供getter和setter方法,如上图所示。
然后再在Controller中添加代码:
@RestController
public class HelloController {
@Autowired
private Book book;
@RequestMapping("/book")
public String hello() {
return "Hello Spring Boot! The BookName is " + book.getBookName() + ";and Book Author is " + book.getAuthor() + ";and Book PinYin is " + book.getPinYin();
}
}
接下来就是去启动项目啦~
最后通过浏览器访问:
pom.xml小分析
- spring-boot-starter-parent 包含了大量配置好的依赖管理。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
Java version
据说Spring默认使用jdk1.6,而我想使用jdk1.8,要做如下配置:
<properties>
<java.version>1.8</java.version>
</properties>
添加spring-boot-starter-web依赖
Spring通过添加spring-boot-starter-*这样的依赖就能支持具体的某个功能。我们这个示例最终是要实现web功能,所以添加的是这个依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
-添加spring-boot-maven-plugin插件
该插件支持多种功能,常用的有两种,第一种是打包项目为可执行的jar包。
在项目根目录下执行mvn package将会生成一个可执行的jar包,jar包中包含了所有依赖的jar包,只需要这一个jar包就可以运行程序,使用起来很方便。该命令执行后还会保留一个XXX.jar.original的jar包,包含了项目中单独的部分。
生成这个可执行的jar包后,在命令行执行java -jar xxxx.jar即可启动项目。
- 启用热部署
在开发过程中,修改代码后,需要重启项目才可调试验证,那么现在为了避免重复启动项目,我们可以启用热部署。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
</dependency>
马马虎虎算是学完了第二课。。太少了,得加快速度了!!!
2018/01/24-25