spring boot(学习笔记第二课)
- spring boot打包以及https配置
>>>学习视频
学习内容:
- 项目启动,打包启动
- https启动,http重定向到https
- 使用bean注入配置数据
1. 项目启动,打包启动
Spring boot的启动方式有好多,这里主要介绍两种。
第一种启动方式:
直接采用IntellIJ IDEA中进行启动(开发阶段)。
第二种启动方式:
我们可以将程序打包,进行单独的启动(脱离IntellIJ IDEA,生产阶段)
注意 Maven默认的packaging方式是jar,所以我们在springboot的起步程序的时候没有选择了jar打包,也不会生成如下的代码
<packaing>jar<packaging>
但是如果我们选择了war打包方式,就会出现。
<packaing>war<packaging>
那么就下来我们就行打包。
打包好了之后,会出现如下log
The original artifact has been renamed to D:\00_study\11_spring_boot\lecture\spring-boot-hello\demo\target\demo-0.0.1-SNAPSHOT.jar.original
这样执行如下命令,就会将这个jar包形式的web applition启动了。如果IntelliJ IDEA中的应用还在打开,那么请关闭,因为同时占有一个8080端口,会导致启动失败
Dell@DESKTOP-DHMQMJG MINGW64 /d/00_study/11_spring_boot/lecture/spring-boot-hello/demo/target (master)
$ java -jar demo-0.0.1-SNAPSHOT.jar
访问http://localhost:8080/hello
,同样会看到我们的程序启动。
2. https启动,http重定向到https
通常在生产环境中我们都是采用https,所以我们对web application进行https的配置。
- 首先利用java自带的工具生成https的证书。
keytool -genkey -alias hellohttps -keyalg RSA -keysize 2048 -keystore httpskey.p12 -validity 365 -J-Duser.language=en
alias
表示证书的别名,我们之后会用到
keystore
表示证书的文件名
password
在这个过程中的设置密码,这个在稍后会使用设定。
-J-Duser.language=en
这里指定英语,中文的时候会出现确定不了的问题。
在我们的resources/
文件夹下创建key
文件夹,之后把httpskey.p12
文件放到这个resources\key
文件夹下。因为resources
是我们的classpath,所以设定证书文件夹的时候比较方便。
2. 修改我们的https证书设定
server.ssl.key-store=classpath:/key/httpskey.p12
server.ssl.key-alias=hellohttps
server.ssl.key-store-password=123456
- 重新启动我们的web application
Tomcat initialized with port 8080 (https)
- 使用https链接hello,world
- 点击
高级
->继续前往localhost(不安全)
,之后继续访问。
- http的请求重定向到https
如果需要就是要使用http的协议来访问应用程序,那么可以进行配置spring boot,进行请求的重定向。
- 定义tomcat的配置类,在这个类里面,生成
TomcatServletWebServerFactory
的bean。 - 之后在定义出http协议专用的connector,并追加到这里的
TomcatServletWebServerFactory
的bean里面。注意这里http的端口必须和8080区分开,这里我们采用8081端口
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory tomcatServletWebServerFactory =
new TomcatServletWebServerFactory();
tomcatServletWebServerFactory
.addAdditionalTomcatConnectors(createTomcatConnector());
return tomcatServletWebServerFactory;
}
private Connector createTomcatConnector(){
Connector httpConnector = new Connector(
"org.apache.coyote.http11.Http11NioProtocol"
);
httpConnector.setPort(8081);
httpConnector.setSecure(false);
httpConnector.setScheme("http");
httpConnector.setRedirectPort(8080);
return httpConnector;
}
}
- 进行http访问测试。
同样我们能够访问http的8081端口,其实这个是8080的https协议端口。
3. 使用bean注入配置数据
- 我们可以在application.properties里面自己定义数据,通过bean的方式注入到web application。
shop.name="finlay shop"
shop.owner="finlay"
shop.location="china"
- 创建bean类,将数据注入进来。
@Data
@Component
@ConfigurationProperties(prefix = "shop")
public class ShopConfig{
private String name;
private String owner;
private String location;
}
注意@configurationProperties的注解,有一个prefix参数,这里设定了shop,和前面properties里面的名字是一致的
@Component
这个注解表示这个类是一个bean类,spring boot的启动阶段会将这个类自动生成一个实例。
@configurationProperties
表示这个bean类会自动解释application.properties里面的变量设定,并且前缀prefix是shop的。
@Data
这个注解需要特殊解释下。它属于lombok的组件的一部分。因为大多数的bean数据类都需要getter和setter,每次追加都比较麻烦,lombok给我们提供了方便,我们在定义bean类的时候,比如说上面的ShopConfig类,我们就需要定义各个private String的字段就可以,至于getter和setter函数,通过注解@Data
,都会自动给我们生成。
IntelliJ IDEA
上加入需要两个步骤。
- 首先在
IntelliJ IDEA
中加入lombok的plugin。
- 还有就是在使用的时候,在bean类定义的时候,加上
@Data
,这个注解加上后,lombok就能给自动加上getter和setter,省去了很多步骤。
加入的时候@Data
会找不到包,ALter+Enter
之后,IntelliJ IDEA
会自动为你增加maven的依赖,并加入import
。
- 使用自定义的bean类。
在HelloController
中使用将这个bean进行AutoWired
@Autowired
private ShopConfig shopConfig;
这个时候,shopConfig
这个变量就会自动被赋值,AutoWired之后,这个值就是在web application启动的时候被自动注入的变量。