SpringBoot
2020年4月30日
17:06
目录
SpringBoot简介:
- 是一个快速开发的框架,能够快速整合第三方框架,全部采用注解形式,简化开发,内置web容器,SpringBoot的Web组件默认集成SpringMVC
SpringBoot优点:
- 快速入门,快速开发,
- 没有冗余代码生成,没有XML配置的要求,全部采用注解形式
- 开箱即食,提供各种默认配置简化项目配置
- 内置Web服务器,如:tomcat
SpringBoot和SpringMVC的关系:
- SpringBoot的Web组件集成了SpringMVC框架
SpringBoot和SpringCloud的关系:
- SpringCloud是一套完整的微服务框架,SpringCloud依赖于SpringBoot
快速入门
- 第一步导入jar包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- spring-boot-start-parent:依赖管理,再声明其他SpringBootjar包就不用version了
- spring-boot-starter-web:SpringWeb的核心组件
编写第一个SpringBoot应用程序
- 第一种启动方式:
@RestController
@EnableAutoConfiguration
public class HelloController {
@RequestMapping("/hello")
public String index() {
return "Hello World";
}
}
public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
- @RestController:相当于@Controller注解+@ResponseBody注解,表示所有的方法返回JSON格式
- @EnableAutoConfiguration:让SpringBoot根据你所声明的依赖,对Spring框架进行自动装配
- SpringApplication.run:表示启动程序的入口,启动程序
- 第二种启动方式:
@ComponentScan(basePackages = "com.wb.controller")
@EnableAutoConfiguration
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
- @ComponentScan(basePackages = "com.wb.controller"):扫包
- 第三种启动方式:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
- @SpringBootApplication:被@EnableAutoConfiguration+@ComponentScan+@Configuration注解修饰,相当于这三个注解的作用
- 扫包范围:加上@SpringBootApplication注解的类,当前包下和子包下
Web静态资源访问
- 我们开发Web应用时,需要引用大量的JSP,CSS,图片等静态资源
- SpringBoot默认提供静态资源目录需至于classpath下目录名须符合/static、/public、/resources、/META-INF/resources
- 举例:在src/main/resources目录下新建static,放置一个图片
- 启动程序后直接访问:http://localhost:8080/ab.jpg。如能显示图片,配置成功。
渲染Web页面
- 在之前的例子中,我们都是使用@RestController注解来处理请求,返回的内容为JSON对象,如果我们要渲染HTML页面的时候该如何实现?
- 模板引擎
- SpringBoot提供了多种模板引擎默认配置支持:
- 1、Thymeleaf 2、FreeMarker 3、Velocity 4、Groovy 等
- SpringBoot建议使用以上模板,避免使用JSP,会无法实现SpringBoot的多种特性
- 默认模板配置路径:src/main/resources/templates
- 使用FreeMarker模板引擎渲染web视图
- 引入jar包
<!--SpringBoot整合FreeMarker-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
- 在src/main/resources/templates文件夹下新建index.ftl文件
编写代码
@RequestMapping("/index")
public String index(Map<String, Object> map) {
map.put("name","张三");
return "index";
}
启动项目:http://localhost:8080/index
- FreeMarker配置
新建application.properties文件
spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved
整合MyBatis
- 引入jar包
<!--SpringBoot整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!--mySql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
- 在application.properties中添加
###数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/test?useSSL=FALSE&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=ba*123456
- Mapper代码
public interface UserMapper {
@Insert("INSERT INTO USERS(NAME, AGE) VALUES(#{name}, #{age})")
int insert(@Param("name") String name, @Param("age") Integer age);
}
//启动方式,注意扫包@MapperScan(basePackages = "com.wb.mapper")
@MapperScan(basePackages = "com.wb.mapper")
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
整合JDBCTemplate
- 导入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
- 配置和上面相同
@Service
public class UserServiceImpl implements UserService {
@Autowired
private JdbcTemplate jdbcTemplate;
public void createUser(String name, Integer age) {
jdbcTemplate.update("insert into user values(null,?,?);", name, age);
}
}
整合事务管理
- SpringBoot默认集成事务,只需要在方法上加上@Transactional注解即可
整合日志管理
- 导入jar包和log4j.properties文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
- 使用AOP同一管理Web请求日志
@Aspect
@Component
public class WebLogAspect {
private static final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(public * com.wb.controller.*.*(..))")
public void webLog() {
}
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
// 接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes)
RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
// 记录下请求信息
logger.info("URL : " + request.getRequestURL().toString());
logger.info("HTTP_METHOD : " + request.getMethod());
logger.info("IP : " + request.getRemoteAddr());
Enumeration<String> enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String name = (String) enu.nextElement();
logger.info("name:{},value:{}", name, request.getParameter(name));
}
}
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
logger.info("RESPONSE : " + ret);
}
}
其他内容
- 使用@Async实现异步调用
- 启动项加上@EnableAsync,需要执行的异步方法加上@Async,底层使用多线程技术
- 自定义参数
@Value("${name}")
private String name;
- 使用@Value注解