SpringBoot介绍
文章目录
前言
java一直被人诟病的一点就是臃肿、麻烦。当我们还在辛苦搭建项目时,可能使用其他语言的程序员已经把功能写好了,比如有下面两方面的原因:
复杂的配置(项目各种配置其实就是开发时的损耗,挤占写应用程序逻辑的时间)
混乱的依赖管理(决定项目需要哪些库让人头疼,还得弄清楚这些库版本之间是否会有冲突。一旦写错依赖版本,不兼容问题必然让人头疼)
在此我们提出SpringBoot脚手架。用来快速构建庞大的Spring项目,减少一切的xml的配置,做到开箱即用,迅速上手,更多的关注到业务本身。
提示:以下是本篇文章正文内容
一、SpringBoot是什么?
SpringBoot简化了基于Spring的应用开发,只需要“run”就能创建独立的Spring应用。SpringBoot是一个开箱即用的设置(提供默认设置,存放默认配置的包就是启动器starter)。我们可以使用Spring Boot创建java应用,并使用java-jar启动它。
总结出,它可以给开发者提供一个非常快速的,广泛接受的入门体验;开箱即用,通过自己设置参数(.properties)。
二、使用步骤
1.java配置
主要靠java类和一些注解,比较常用的注解有:
@Configuration:声明一个类作为配置类,代替xml文件
@Bean:声明在方法上,将方法的返回值加入Bean容器,代替标签
@Value:属性注入
@PropertySource:指定外部属性文件(“classpath:jdbc.properties”)
在pom.xml文件中引入Druid连接池依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
2.SpringBoot属性注入
代码如下(示例):
方案一:
<!-- 源文件:(名称,jdbc.properties) -->
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/li7
jdbc.password=root
<!-- 配置文件 -->
类注解:
@Configuration
@PropertySource("classpath:jdbc.properties")
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
方案二:(适合多个datasource用)
<!-- 源文件:(名称,application.properties:是SpringBoot默认读取的属性文件名) -->
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/li7
jdbc.password=root
<!-- 配置文件 -->
类注解:
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
@Bean(注入)
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
//@Autowired(注入)
@Autowired
privarte JdbcProperties prop;
//构造函数注入
private JdbcProperties prop;
public JdbcConfig(Jdbcproperties){
this.prop = prop;
}
在JdbcProperties类中添加:
@ConfigurationProperties(prefix = "jdbc")
@Data
public class JdbcProperties {
String url;
String driverClassName;
String username;
String password;
}
方案三:(适合一个datasource用)
原文件同名同类型
直接在JdbcProperties类中添加:(无需其他配置类)
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
return new DruidDataSource();
}//检测到bean调用DruidDataSource();匹配前缀是jdbc的配置属性
yaml文件配
优雅方案:
<!-- 源文件(名称,application.yaml) -->
jdbc:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/li7
username:root
password:root
3.自动配置原理
图中出现了两个东西值得我们注意:
注解:@SpringBootApplication
run方法:SpringApplication.run()
首先分析注解:
最后的三个需要重点注意
@SpringBootConfiguration:源码内又出现一个@Configuration注解。通过注释阅读,这个注解的作用就是声明当前类的一个配置类,然后Spring会自动扫描到添加了@Configuration的类,并且读取其中的配置信息。而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。
@EnableAutoConfiguration:SpringBoot内部对大量的第三方库或Spring内部进行了默认配置,这些配置是否生效,取决于我们是否引入了对应库(如:spring-boot-starter-web)所需的依赖,如果有那么默认配置就会生效。使用SpringBoot构建一个项目,只需要引入所需框架依赖。
@ComponentScan:启动类会放在一个比较前的包目录中
4.SpringBoot实操
1.自定义配置(整合SpringMVC):修改端口(将全局属性中的server.port=8080改好)
2.访问静态资源(路径:·classpath:META-INF/resources/,
classpath:/resources/ ,
classpath:/static/,
classpath:/public`
3.添加拦截器:官网的解释为,保持SpringBoot的一些默认mvc特征,同时又想自定义一些mvc配置(拦截器),让一个类实现WebMvcConfigurer,并且添加@Configuration注解,但不能加@EnableWebMvc注解。(通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMvc配置。
<!-- 定义拦截器 -->
public class LoginInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
logger.debug("preHandle method is now running!");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
logger.debug("postHandle method is now running!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
logger.debug("afterCompletion method is now running!");
}
}
<!-- 定义配置类 -->
@Configuration
public class MvcConfig implements WebMvcConfigurer{
/**
* 通过@Bean注解,将我们定义的拦截器注册到Spring容器
* @return
*/
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
/**
* 重写接口中的addInterceptors方法,添加自定义拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径
registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
}
#设置项目包的日志级别为debug
logging.level.com.ph=debug
5.整合jdbc和事务
SpringBoot启动器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
数据库驱动:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
事务:
@Service
public class UserService{
@Autowired
private UserMapper user Mapper;
public User queryById(Long id){
return this.userMapper.selectByPrimaryKey(id);
}
@Transactional
public void deletById(Long id){
this.userMapper.deleteByPrimaryKey(id);
}
}
整合连接池:(HikariCp速度较快的连接池)
# 连接四大参数(需要指定的参数)
spring.datasource.url=jdbc:mysql://localhost:3306/heima
spring.datasource.username=root
spring.datasource.password=123
# 可省略,SpringBoot自动推断
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.hikari.idle-timeout=60000
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.minimum-idle=10
整合mybatis:
<!--mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2<version>
</dependency>
# mybatis 别名扫描
mybatis.type-aliases-package=com.lepin.pojo
# mapper.xml文件位置,如果没有映射文件,请注释掉
mybatis.mapper-locations=classpath:mappers/*.xml
@Mapper
public interface UserMapper {
}
<!-- 通用mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.2<version>
</dependency>
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{
}
通用mapper:
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{
}
总结
提示:这里对文章进行总结:
你引入了相关依赖和自己没有配置,SpringBoot会生效默认配置
1)直接引入SpringBoot提供的starter(启动器),便会自动管理依赖集版本
2)全局配置:通过application.properties来覆盖默认属性值,形成自定义配置。