目录
生产级别的spring应用,搭建程序的脚手架,内置tomcat,推崇约定大于配置
java-jar启动
存放默认配置的包是启动器
自己设置参数:.properties
- 创建项目,在maven中添加
<parent>
<!--父工程-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
@RestController
@RequestMapping
public class HelloController {
// @RequestMapping(value = "hello", method = RequestMethod.GET)
@GetMapping("hello")
public String hello(){
return "Hello World!!!!!!!!!!!!!!";
}
}
spring的Java配置(注解)
- @Configuration:声明类作为配置类,代替xml文件
- @Bean:声明在方法上,将方法的返回值加入Bean容器里,代替<bean>
- @value:属性注入
- @PropertySource:指定外部属性文件
Druid是Java语言中数据库连接池。Druid能够提供强大的监控和扩展功能。
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
SpringBoot的属性注入
@ConfigurationProperties
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig2 {
@Bean
public DataSource dataSource(JdbcProperties prop){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(prop.getDriverClassName());
dataSource.setUrl(prop.getUrl());
dataSource.setUsername(prop.getUsername());
dataSource.setPassword(prop.getPassword());
return dataSource;
}
}
新建一个类,用来进行属性注入
@ConfigurationProperties(prefix = "jdbc")//读取属性文件中前缀为jdbc
@PropertySource("classpath:jdbc.properties")// 引用文件
public class JdbcProperties {
private String driverClassName;
private String url;
private String username;
private String password;
//省略get/set方法
}
松散绑定
- @AutoWired注入
- 构造函数注入
- 声明@Bean的方法参数注入
@SpringBootConfiguration
@EnableAutoConfiguration
@ ComponentScan
默认配置原理
引入相关依赖,自己没有配置
启动器(stater),全局配置:自定义application.properties文件来进行覆盖
Spring Boot实战
修改端口:server.port=80
访问静态资源
在resource文件夹下创建一个static文件夹放置静态资源,默认的静态资源路径是:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public
添加拦截器
自定义MVC配置(拦截器、格式化器、视图控制器、消息转换器、错误处理器)
自定义MvcConfig类实现WebMvcConfigurer接口,,添加@Configuration注解,不要加@EnableWebMvc,自定义HandleMapping、HandleAdapter、ExceptionResovler等组件,创建WebMvcRegistrationAdapter实例
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 方法一
//拦截器的注册器
registry.addInterceptor(new HandlerInterceptor() {
//添加日志
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//前置
logger.info("preHandle is running");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//后置
logger.info("postHandle is running");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//最终方法
logger.info("afterCompletion is running");
}
}).addPathPatterns("/**");
}
方法二
使用java配置方法
@Bean
public LoginInterceptor loginInterceptor(){
//由spring管理,注册Bean
LoginInterceptor loginInterceptor = new LoginInterceptor();
return loginInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 方法二
registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
调整日志级别
在application.properties文件中添加如下代码:
#日志
logging.level.edu.qut = debug
logging.level.org.springframework=debug
整合JDBC和事务
添加启动器和mysql数据库驱动
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
通过@Transactional注解,管理事务
整合连接池
HikariCP是最快的连接池,c3p0、Druid、DBCP
在resources文件夹下添加application.yml,YAML类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多
spring:
datasource:
# 可省略,SpringBoot自动推断
# driver-class-name:
url: jdbc:mysql://localhost:3306/test
username:
password:
# hikari:
# idle-timeout: 6000
# maximum-pool-size: 30
# minimum-idle: 10
整合mybatis
mybatis官网提供的启动器
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
在Application.java文件添加@MapperScan("edu.qut.mapper"),在application.yml中添加
mybatis:
#别名扫描
type-aliases-package: edu.qut.pojo
#mapper.xml文件位置,如果没有映射文件,请注释掉
#mapper-locations: classpath:mappers/*.xml
没有配置mapper接口扫描包,需给每个Mapper接口添加@Mapper注解,才能识别
通用Mapper
<!--通用Mapper-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
无需任何配置就可使用,@Mapper
Thymeleaf
模板引擎技术:Mustache、freemarker、Thymeleaf等,可完全代替jsp
特点:
- 动静结合
- 开箱即用
- 多方言支持
- 与springboot完美结合
编写接口
引入启动器
<!--模板引擎-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
@GetMapping("/all")
public String all(Model model){
//查询用户
List<User> userList = this.userService.queryAll();
//放入模型
model.addAttribute("users",userList);
//返回模板名称(就是classpath:/templates目录下的html文件
return "users";
}
在templates文件夹下创建一个users.html文件
语法:
- ${}:类似el表达式
- th-:利用h5自定义属性实现,不支持h5时用data-th-
- th:each:类似c:foreach遍历
- th:text:声明标签中的文本