一、springboot简介:
springboot,说到底还是spring家族的,只不过用spring时我们要写大量的xml配置各种东西,而springboot不用写这些,直接写在application.properties或application.yml中即可,相当于那些复杂的配置springboot底层为我们配置好了,直接声明一下就可以。
二、springboot常用知识点:
1、springboot对静态资源的处理:
springboot项目中静态资源的根目录是:
src/main/resources/static
静态资源如html页面、图片、js、css等都放在此文件夹或该文件夹的子文件夹下。比如在static下有water.jpg图片,在没有配置视图解析器和访问根路径的情况下,
在浏览器直接输入:
http://localhost:8080/water.jpg
即可访问该图片。
一般而言,会在static下建立pages文件夹用于存放页面,js文件夹存放js代码,css文件夹存放css。
2、全局异常捕获:
当你访问页面出错时,默认是404或500以及以一大串英文,自己写了全局异常捕获类就可以在出错时显示自己写的内容。
只需要编写一个类加上注解即可,如下:
@ControllerAdvice public class GlobalExceptionHandler{ @ExceptionHandler(RuntimeException.class) @ResponseBody public Map<String,Object> resultError(){ Map<String,Object> modelMap = new HashMap<String,Object>(); modelMap.put("errCode",500); modelMap.put("errMsg","错误!"); return modelMap; } }
这实际上是用了spring的异常通知。
3、配置多环境:
在实际开发过程中,一般可能有以下4个环境:
test ------------------ 本地开发环境 sit ------------------ 测试环境 pre ------------------ 预生产环境 pid ------------------ 生产环境
那么如何为不同的生产环境配置不同的配置文件呢?首先得有如下5个.properties 配置
文件:
application.properties ------------------ 总配置文件 application-test.properties ------------------ 本地 application-sit.properties ------------------ 测试 application-pre.properties ------------------ 预生产 application-pid.properties ------------------ 生产
每个环境下的配置写到对应的配置文件中,然后在总配置文件application.properties中通过
spring.profiles.active =
读取不同的配置文件,=test
时读取application-test.properties
,=sit
时读取application-sit.properties
。
4、整合jdbcTemplate:
虽然jdbcTemplate用得不多了,也介绍一下如何整合。
添加依赖:
<!-- 要用jdbcTemplate,除了数据库依赖,添加这一个即可 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>2.0.2.RELEASE</version> </dependency>
注入使用:
在需要使用的地方直接注入使用即可,如下:
public class test{ @AutoWired private JdbcTemplate jdbcTemplate; public void insertUser(String name,int age){ jdbcTemplate.update("insert into tb_user values(null,?,?)",name,age); } }
5、整合jpa:
添加依赖:
<!-- 除了数据库依赖,添加这一个即可 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.0.2.RELEASE</version> </dependency>
加注解:
在启动类上添加两个注解:@EntityScan("实体类所在的包")
,
@EnableJpaRepositories("dao层所在包名")
,如下图:
@EnableJpaRepositories("com.zhu.dao") @EntityScan("com.zhu.entity") @SpringBootApplication public class App{ public static void main(String[] args){ SpringApplication.run(App.class,args); } }
完成这两步就可以使用jpa了。
6、整合mybatis:
添加依赖:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency>
加注解:
启动类上加@MapperScan("dao层所在包名")
,若需要事务支持,加上
@EnableTransactionManagement
,如下:
@EnableTransactionManagement @MapperScan("com.zhu.dao") @SpringBootApplication public class App{ public static void main(String[] args){ SpringApplication.run(App.class,args); } }
若mybatis基于注解形式,这样就行了,可以直接使用了,若mybatis基于xml形式,那就要在application.properties中配置如下内容:
#扫描dao层接口对应的xml文件 mybatis.mapper-locations=classpath:mapper/*.xml #扫描mybatis的配置文件 mybatis.config-location=classpath:mybatis-config.xml #起别名(可选),写了这个在resultType中就不用写实体类包名,直接写类名即可 mybatis.type-aliases-package=com.zhu.entity
7、整合多数据源:
整合多数据源一般才用分包管理的办法,比如test1包使用数据源1,test2包使用数据源2。具体做法如下:
首先来看项目的目录结构:
配置:
####整合多数据源##### ######数据源1:springboot1######## spring.datasource.springboot1.driverClassName = com.mysql.jdbc.Driver spring.datasource.springboot1.url = jdbc:mysql:///springboot1 spring.datasource.springboot1.username = # spring.datasource.springboot1.password = # ######数据源2:springboot2######## spring.datasource.springboot2.driverClassName = com.mysql.jdbc.Driver spring.datasource.springboot2.url = jdbc:mysql:///springboot2 spring.datasource.springboot2.username = # spring.datasource.springboot2.password = #
数据源1是连接的springboot1数据库,数据源2是连接springboot2数据库。以spring.datasource.springboot1.
和spring.datasource.springboot2.
来区分数据源1和数据2。但是这属于自定义的标签,springboot不会自动加载这两个
数据源,因此要创建两个配置类去加载这两个数据源:
加载数据源:
/** * 配置数据源1(springboot1)的类 * @author zhu * */ @Configuration //表示只要是在test01包下的,都访问springboot1数据源 @MapperScan(basePackages = "com.zhu.test01",sqlSessionFactoryRef = "springboot1SqlSessionFactory") public class DataSource1Config { //创建datasource @Bean(name = "springboot1DataSource") @ConfigurationProperties(prefix = "spring.datasource.springboot1") @Primary public DataSource testDataSource() { return DataSourceBuilder.create().build(); } //创建SqlSessionFactory并注入datasource @Bean(name = "springboot1SqlSessionFactory") @Primary public SqlSessionFactory testSqlSessionFactory(@Qualifier("springboot1DataSource") DataSource dataSource) throws Exception{ SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } //创建事物管理并注入dataSource @Bean(name = "springboot1TransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("springboot1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } //创建事物管理并注入sqlSessionFactory @Bean(name = "springboot1SqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("springboot1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
/** * 配置数据源2(springboot2)的类 * @author zhu * */ @Configuration //表示只要是在test02包下的,都访问springboot2数据源 @MapperScan(basePackages = "com.zhu.test02",sqlSessionFactoryRef = "springboot2SqlSessionFactory") public class DataSource2Config { //创建datasource @Bean(name = "springboot2DataSource") @ConfigurationProperties(prefix = "spring.datasource.springboot2") public DataSource testDataSource() { return DataSourceBuilder.create().build(); } //创建SqlSessionFactory并注入datasource @Bean(name = "springboot2SqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("springboot2DataSource") DataSource dataSource) throws Exception{ SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean.getObject(); } //创建事物管理并注入dataSource @Bean(name = "springboot2TransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("springboot2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } //创建事物管理并注入sqlSessionFactory @Bean(name = "springboot2SqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("springboot2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
这样就完成了这两个数据源的加载,由于有@MapperScan
指定包,prefix =
... 指定加载哪个数据源,所以就能实现test01包下的就使用springboot1这个数据库,test02包下的就使用springtboot2数据库。至此就完成了多数据源的整合。注意其中一个数据源的加载时要加上@Primary
注解,否则会报错。
总结:
以上就是springboot常用的一些功能,通过整合上面那些技术肯定已经感受到了它的便捷,听说spring boot是以后的趋势,趁早掌握!
以上内容属于个人笔记整理,如有错误,欢迎批评指正!