SpringBoot 入门
1、SpringBoot是什么?
Spring Boot为Java开发人员提供了一个很好的平台,可以开发一个可以运行的独立和生产级Spring应用程序。可以开始使用最少的配置,而无需进行整个Spring配置设置。
2、优点
Spring Boot为其开发人员提供以下优势 -
易于理解和开发Spring应用
提高生产力
缩短开发时间
3、目标
Spring Boot的设计目标如下 -
避免在Spring中进行复杂的XML配置
以更简单的方式开发生产就绪的Spring应用程序
减少开发时间并独立运行应用程序
提供一种更简单的应用程序入门方式
4、SpringBoot启动器
所有Spring Boot启动程序都遵循相同的命名模式spring-boot-starter-*,其中*表示它是应用程序的一种类型。
5、SpringBoot入口
Spring Boot Application的入口点是包含@SpringBootApplication注释的类。该类应具有运行Spring Boot应用程序的主要方法。
@SpringBootApplication注释包括自动配置,组件扫描和Spring Boot配置。 如果将@SpringBootApplication批注添加到类中,则无需添加@EnableAutoConfiguration,@ComponentScan和@SpringBootConfiguration批注。@SpringBootApplication注释包括所有其他注释。 请注意以下代码以便更好地理解 - import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
6、Maven依赖
对于Maven配置,应该继承Spring Boot Starter父项目来管理Spring Boot Starters依赖项。 因此只需在pom.xml 文件中继承启动父级,如下所示。 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> </parent> XML 应该指定Spring Boot父 Starter依赖项的版本号。 然后,对于其他启动器依赖项,不需要指定Spring Boot版本号。 观察下面给出的代码 - <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
7、SpringBoot项目结构
com +- abysm +- myproject +- SpringBootApplication.java (入口,规定和其他包同级目录) | +- model | +- Product.java +- dao | +- ProductRepository.java +- controller | +- ProductController.java +- service | +- ProductService.java SpringBootApplication.java文件应该声明main方法和@SpringBootApplication。 请遵守下面给出的代码以便更好地理解 - package com.abysm.myproject; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootApplication{ public static void main(String[] args) {
SpringBootApplication.run(Application.class, args);
} }
8、配置不同环境的yml配置文件
Spring Boot项目开发部署过程中,通常会有多套环境(开发dev、测试test、预生产rc,生产pro),每套环境的配置是不同的。
将所有环境共同的参数配置在同一个文件中;再将每套环境不同的参数配置在各自文件中,可以减少部署错误的概率,同时项目可读性好,
application.yml 配置共同的参数,并确定当前运行环境
spring:
profiles:
active: dev
这里的spring.profiles.active=dev即表示,当前是dev环境;application-{profile}.yml就对应application-dev.yml,{profile}的取值可以是dev, test, rc, pro
application-dev.yml
server: port: 8080 spring: profiles: dev datasource: name: test url: jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true username: root password: root # 使用druid数据源 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver filters: stat maxActive: 20 initialSize: 1 maxWait: 60000 minIdle: 1 timeBetweenEvictionRunsMillis: 60000 minEvictableIdleTimeMillis: 300000 validationQuery: select 'x' testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxOpenPreparedStatements: 20
9、配置随机端口
在application.properties 文件中,server.port属性设置随机端口号: server.port = 0 在application.yml 文件中,找到如下内容 - server: port: 0 注 - 如果启动Spring Boot应用程序时server.port指定值为0,则Tomcat使用随机端口号。
10、使用thymeleaf模板引擎
Thymeleaf将文件转换为格式良好的XML文件。它包含6种类型的模板,如下所示 -
- XML
- 有效的XML
- XHTML
- 有效的XHTML
- HTML5
- 旧版HTML5
除旧版HTML5之外的所有模板都指的是格式正确的有效XML文件。 旧版HTML5允许我们在网页中呈现HTML5标记,包括非封闭标记。
package com.abysm.demo.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class WebController { @RequestMapping(value = "/index") public String index() { return "index"; } } 在上面的示例中,请求URI是/index,被重定向到index.html文件。 请注意,index.html 文件应放在templates目录下,所有JS和CSS文件应放在static目录下。
Maven用户可以将以下依赖项添加到pom.xml 文件中 -
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
11、跨域资源共享CORS
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。 所谓同源是指,域名,协议,端口均相同,不明白没关系,举个栗子: http://www.123.com/index.html 调用 http://www.123.com/server.PHP (非跨域) http://www.123.com/index.html 调用 http://www.456.com/server.php (主域名不同:123/456,跨域) http://abc.123.com/index.html 调用 http://def.123.com/server.php(子域名不同:abc/def,跨域) http://www.123.com:8080/index.html调用 http://www.123.com:8081/server.php(端口不同:8080/8081,跨域) http://www.123.com/index.html 调用 https://www.123.com/server.php(协议不同:http/https,跨域) 请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。
在控制器方法中启用CORS
需要通过对控制器方法使用@CrossOrigin
注解来设置RESTful Web服务的起源。 @CrossOrigin
注源支持特定的REST API,而不支持整个应用程序。
@RequestMapping(value = "/products")
@CrossOrigin(origins = "http://localhost:8080")
public ResponseEntity<Object> getProduct() {
return null;
}
全局CORS配置
需要定义显示的@Bean
配置,以便为Spring Boot应用程序全局设置CORS配置支持。
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/products").allowedOrigins("http://localhost:9000");
}
};
}
12、SpringBoot国际化
国际化是一个使应用程序适应不同语言和区域而无需对源代码进行工程更改的过程。 用它来说,国际化是对本地化的准备。
消息源
默认情况下,Spring Boot应用程序从类路径下的src/main/resources
文件夹中获取消息源。 缺省语言环境消息文件名应为message.properties
,每个语言环境的文件应命名为messages_XX_XX.properties
。 “XX”表示区域代码和国家代码。
应将所有消息属性设置为键值对。 如果在语言环境中找不到任何属性,则应用程序将使用messages.properties 文件中的默认属性。
默认的messages.properties 如下所示 -
welcome.text=Hi Welcome to Everyone
中文对应的属性文件:message_zh_CN.properties 如下所示 -
welcome.text=大家好
HTML文件
在HTML文件中,使用语法#{welcome.text}
显示属性文件中的消息。
<h1 th:text = "#{welcome.text}"></h1>