SpringBoot是由Pivotal团队提供的全新框架 ,它使用特定的方式进行配置(大多数为自动配置),省去了Spring繁琐的xml配置,内置了http服务器,可以通过java程序启动web容器,也整合了常用的框架。总之,SpringBoot帮助程序员进行快速开发和构建项目。
在使用SpringBoot构建web项目时,我们需要引入spring-starter-web模块,实际上这个模块会帮我们引入SpringMvc,由此可见,SpringBoot并不是一个全新的web框架,它只是帮助我们将一些框架整合起来,在构建web项目时,底层还是使用的SpringMvc。
SpringCloud是一套微服务框架,它基于SpringBoot开发,简化了分布式系统的基础设施的开发,比如配置中心、负载均衡、路由、服务治理等,简单的说SpringCloud依赖SpringBoot
@Configuration
作用在类上,底层使用的@Component注解,和xml中的
@EnabledAutoConfiguration
作用在类上,会自动加载jar包里的META-INF/spring-autoconfigure-metadata.properties配置的类(自动配置)
@ComponentScan
开启注解扫描,如果不指定范围,默认扫描当前类所在包范围
@SpringBootApplication
相当于@Configuration、@EnabledAutoConfiguration、@ComponentScan三个注解,通常为项目的入口
SpringBoot可以使用.yml(或者.yaml)和.properties作为配置文件,我们一般使用.yml,因为它结构清晰,更方便阅读
** Springboot提供了两种配置文件的格式:application.properties和application.yml,
因为.yml文件编写和结构更加清晰,所以我们应该尽量使用application.yml作为配置文件
1.配置server(端口、项目访问路径等信息)
server:
port: 8081
context-path: /girl
2.配置spring整合外部框架和应用的信息,如datasource、redis、thymeleaf等
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/girl
username: root
password: 444668
3.配置自定义信息:
(1) 普通信息:在程序中如果需要引用这些参数,使用@Value("${参数名}")注解
name: eragon
age: 23
(2) 封装成对象: 在程序中如果需要引用到这个对象,那么需要写一个POJO类,并使用@ConfigurationProperties(prefix="该对象的名称")和@Component注解,通过@Autowire引用
gril:
name: eragon
age:23
(3) 引用配置文件中的参数
name: eragon
age: 23
content: ${name},${age}
4. 配置profiles:在开发中,我们由于开发环境和生产环境的不同,经常要进行配置文件的切换,比如数据库等信息的配置,会非常的麻烦。通过配置profiles可以实现非常方便的环境
切换。spriingboot中默认采用application-{profileName}.yml来适用于不同环境的配置文件。通过在application.yml主配置文件中使用如下配置:
profiles:
active: dev // 这里的dev指向的是application-dev.yml
5. 配置随机值:通过${random}可以生成不同类型的随机值:
age: ${random.int}
name: ${random.value}
6. 配置日志:
debug: ture // debug级别的日志也会被打印到控制台
logging:
path: c:/upload/ // 指定日志输出目录,会自动生成spring.log文件记录日志
file: c:/upload/my.log // 自定义日志输出路径,需要注意的是path和file如果同时使用,只有file会生效
level:
com.eragon: warn // 表时com.eragon包下的所有类以warn级别输出日志
另外还可以引入外部配置文件,比如使用logback时,以下规则的配置文件都会被加载:logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy
也可以自定义外部配置文件:
config: classpath:myLogback.xml
classpath:/META-INF/resources
classpath:/resources
classpath:/static
classpath:/public
上面4个目录都是SpringBoot的静态资源映射路径,优先级顺序为:META-INF/resources > resources > static > public
对应在application.yml中的默认配置为:
spring:
mvc:
static-path-pattern: ##默认值为 /**
resources:
static-locations: ##默认值为classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
这两个配置相当于nginx的配置,可以通过修改上面两个属性来配置自定义的静态资源路径映射。
在pom中添加Freemarker的依赖后就可以在项目中使用Freemarker了
在项目中我们的程序中肯定会出现异常,直接将异常返回给前台展示对用户非常的不友好,所以我们需要异常进行捕获,用JSON或者其他格式返回给页面。SpringBoot可以通过@ControllerAdvice注解来配置一个全局异常处理类,它可以且只能处理Controller中抛出的异常,不能处理其他如service层抛出的异常。
在项目中我们经常要在JavaBean类中写getter、setter、toString等方法,每添加一个属性都需要改写,非常不方便。Lombok通过改变字节码文件(使用javac技术),让我们只用几个注解就可以简单方便的创建JavaBean。在IDEA中需要先下载Lombok插件。
可以使用@Getter、@Setter等注解自动拥有getter方法和setter方法,也可以直接使用@Data等于@Getter、@Setter、@ToString等。另外我们可以在@Slf4j注解,用来简化日志的输出。
如果要在controller中使用异步方法,一般会使用java多线程技术,new一个Thread去执行,在SpringBoot中我们可以使用@Async注解达到同样的效果。
@Async
public String sendEmail() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "success";
}
另外还需要在controller类中使用@EnableAsync开启异步方法扫描
@EnableAsync
@RestController
public class AsyncController {
@Autowired
private IEmailService emailService;
@RequestMapping("test/async")
public String testAsync(){
// 这个方法将会被异步执行
emailService.sendEmail();
return "";
}
}