Spring Boot 主要特征是:
-
创建独立的spring应用程序
-
直接内嵌tomcat、jetty和undertow(不需要打包成war包部署)
-
提供了固定化的“starter”配置,以简化构建配置
-
尽可能的自动配置spring和第三方库
-
提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
-
<!-- 所有的springboot的工程都以spring父工程为父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> </parent>
2.引入SpringBoot提供的自动配置依赖
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
3.添加引导类,并使用@SpringBootApplication注解
@SpringBootApplication // 相当于 EnableAutoConfiguration + ComponentScan + SpringbootConfiguration public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }
使用@SpringBootApplication 其实是一个组合注解,这里重点的注解有3个:
-
@SpringBootConfiguration: 声明当前类是一个配置类
-
@EnableAutoConfiguration: 开启自动配置
-
@ComponentScan:开启注解扫描
4.java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有:
-
@Configuration
:声明一个类作为配置类,代替xml文件 -
@Bean
:声明在方法上,将方法的返回值加入Bean容器,代替<bean>
标签 -
@Value
:属性注入 -
@PropertySource
:指定外部属性文件。
5.引入druid依赖
<dependency> <groupId>com.github.drtrang</groupId> <artifactId>druid-spring-boot2-starter</artifactId> <version>1.1.10</version> </dependency>
6.添加jdbc.properties配置文件
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/springboottest
jdbc.username=root
jdbc.password=root
7.创建JdbcConfiguration类
@Configuration @PropertySource("classpath:jdbc.properties") public class JdbcConfiguration { @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.setUrl(url); dataSource.setDriverClassName(driverClassName); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } }
解读: - @Configuration :声明 JdbcConfiguration 是一个配置类。 - @PropertySource :指定属性文件的路径是: classpath:jdbc.properties - 通过 @Value 为属性注入值。 - 通过@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。相当于以前的bean标签 然后就可以在任意位置通过 @Autowired 注入DataSource了!
8。使用@Value注解可行,但是不够强大,因为它只能注入基本类型值。
8.1新建
@ConfigurationProperties(prefix = "jdbc") public class JdbcProperties { private String driverClassName; private String url; private String username; private String password; //set和get方法 }
-
-
prefix="jdbc"
读取属性文件中,前缀为jdbc的值。 -
在类上定义各个属性,名称必须与属性文件中
jdbc.
后面部分一致,并且必须具有getter和setter方法 -
需要注意的是,这里我们并没有指定属性文件的地址,SpringBoot默认会读取文件名为application.properties的资源文件,所以我们
8.2在JdbcConfiguration中使用这个属性:
-
通过
@EnableConfigurationProperties(JdbcProperties.class)
来声明要使用JdbcProperties
这个类的对象 -
然后你可以通过以下方式在JdbcConfiguration类中注入JdbcProperties:
8.2.1 @Autowired注入
@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration { @Autowired private JdbcProperties jdbcProperties; @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(jdbcProperties.getDriverClassName()); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); return dataSource; } }
8.2.2构造函数注入
// 使用构造函数注解注入 @Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration { private JdbcProperties jdbcProperties; public JdbcConfiguration(JdbcProperties jdbcProperties){ this.jdbcProperties = jdbcProperties; } @Bean public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(jdbcProperties.getDriverClassName()); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); return dataSource; } }
8.2.3@Bean方法的参数注入
@Configuration @EnableConfigurationProperties(JdbcProperties.class) public class JdbcConfiguration { @Bean public DataSource dataSource(JdbcProperties jdbcProperties) { DruidDataSource dataSource = new DruidDataSource(); dataSource.setDriverClassName(jdbcProperties.getDriverClassName()); dataSource.setUrl(jdbcProperties.getUrl()); dataSource.setUsername(jdbcProperties.getUsername()); dataSource.setPassword(jdbcProperties.getPassword()); return dataSource; } }
8.2.4直接在需要使用的地方声明
如果一段属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties)中。而是直接在需要的地方声明即可:
@Configuration public class JdbcConfiguration { @Bean // 声明要注入的属性前缀,SpringBoot会自动把相关属性通过set方法注入到DataSource中 @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); return dataSource; } }
SpringBoot提供了默认配置。
因此,玩SpringBoot的第一件事情,就是找启动器,SpringBoot提供了大量的默认启动器,
<!--jdbc的启动器,默认使用HikariCP连接池--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--不要忘记数据库驱动,因为springboot不知道我们使用的什么数据库,这里选择mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
指定连接池参数
# 连接四大参数
spring.datasource.url=jdbc:mysql://localhost:3306/springboottest
spring.datasource.username=root
spring.datasource.password=root
# 可省略,SpringBoot自动推断
spring.datasource.driverClassName=com.mysql.jdbc.Driver
9.2也可以使用druid连接池
<!-- Druid连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency>
在连接池属性上有些不同
#初始化连接数
spring.datasource.druid.initial-size=1
#最小空闲连接
spring.datasource.druid.min-idle=1
#最大活动连接
spring.datasource.druid.max-active=20
#获取连接时测试是否可用
spring.datasource.druid.test-on-borrow=true
#监控页面启动
spring.datasource.druid.stat-view-servlet.allow=true
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=cn.test.pojo
# mapper.xml文件位置,如果没有映射文件,请注释掉
# mybatis.mapper-locations=classpath:mybatis/mappers/**/*.xml
@Mapper public interface UserMapper { }
10.通用mapper
<!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency>
不需要做任何配置就可以使用了
11.开启事务
@Service public class UserService { @Autowired private UserMapper userMapper; public User queryUserById(Long id){ return this.userMapper.selectByPrimaryKey(id); } @Transactional public void deleteUserById(Long id){ this.userMapper.deleteByPrimaryKey(id); } }
12在controller中添加
@RestController @RequestMapping("User") public class UserController { @Autowired private UserService userService; @GetMapping("{id}") @ResponseBody public User queryUserById(@PathVariable("id")Long id){ return this.userService.queryUserById(id); } }
测试就OK了