Spring Boot

1、Spring Boot是什么?有什么作用?
Spring Boot是一个便捷搭建 基于spring工程的脚手架;作用是帮助开发人员快速搭建大型的spring 项目。简化工程的配置,依赖管理;实现开发人员把时间都集中在业务开发上。

2、如何使用Spring Boot搭建一个项目?
Spring Boot工程可以通过添加启动器依赖和创建启动引导类实现快速创建web工程。
1.创建工程,引入父依赖,指定spring boot版本2.1.5

   
        org.springframework.boot
        spring-boot-starter-parent
        2.1.5.RELEASE
    

2.添加启动器依赖,spring-boot-starter-web

   
    
        1.8
    

        
        
            org.springframework.boot
            spring-boot-starter-web
        

3.创建启动类

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

4.创建处理器Controller

@RestController
public class HelloController {

    @GetMapping("hello")
    public String hello() {
        return "Hello";
    }
}

3、Spring Boot如何配置一个数据库连接池?
1.在 pom.xml 文件中添加Druid连接池依赖

       
            com.alibaba
            druid
            1.1.6
        

2.创建数据库连接参数的配置文件jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root
jdbc.password=123456

3.创建配置类

@Configuration
@PropertySource("classpath:jdbc.properties")
public class Jdbcconfig {
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(driverClassName);
        druidDataSource.setUrl(url);
        druidDataSource.setUsername(username);
        druidDataSource.setPassword(password);
        return druidDataSource;
    }
}

4、如何将配置文件中的配置项读取到一个对象中?
有两种方法
方法一:
1.将jdbc.properties修改名称为application.properties
2.使用@ConfigurationProperties编写配置项类将配置文件中的配置项设置到对象中

@Configuration
@PropertySource("classpath:application.properties")
public class JdbcProperties{
    
    String driverClassName;
    String url;
    String username;
    String password;

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

3.@EnableConfigurationProperties将JdbcProperties对象注入到JdbcConfig

@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfig {

    @Bean
    public DataSource dataSource(JdbcProperties jdbcProperties) {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(jdbcProperties.getDriverClassName());
        druidDataSource.setUrl(jdbcProperties.getUrl());
        druidDataSource.setUsername(jdbcProperties.getUsername());
        druidDataSource.setPassword(jdbcProperties.getPassword());
        return druidDataSource;
    }
}

方法二:直接使用@ConfigurationProperties在方法上面使用

@Configuration
public class Jdbcconfig {

    @Bean
    // 声明要注入的属性前缀,Spring Boot会自动把相关属性通过set方法注入到DataSource中
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        return new DruidDataSource();
    }
}



yml配置文件的特征

  1. 树状层级结构展示配置项;
  2. 配置项之间如果有关系的话需要分行空两格;
  3. 配置项如果有值的话,那么需要在: 之后空一格再写配置项值;

5. 多个yml文件如何进行配置?
以application-**.yml命名;在application.yml中使用激活
这些配置文件即可。

spring:
  profiles:
    active: y1,*y2

6、Spring Boot项目的配置是怎样加载的?
在 META-INF\spring.factories文件中定义了很多自动配置类;可以根据在pom.xml文件中添加的 启动器依赖自动配置组件

通过如下图流程可以去修改application配置文件,改变自动配置的组件默认参数


7、如何使用lombok的注解实现pojo类的简化?
lombok是一个插件工具类包;提供了一些注解@Data、@Getter等这些注解去简化实体类中的构造方法、get/set等方法的编写。
1.在IDEA中安装lombok插件;
2.添加lombok对应的依赖到项目pom.xml文件;

        
            org.projectlombok
            lombok
        

3.在实体类上加上@Data,就可以省去getter和setter等方法的编写,lombok插件会自动生成

8、Spring Boot如何修改服务端口和访问项目中的静态资源?
1.修改端口:修改application.yml配置文件,添加如下配置

#映射端口
server:
  port: 80

2.访问项目中的静态资源:创建classpath:/static/目录,将静态文件放置该目录下

9、如何使用Spring Boot配置自定义SpringMVC拦截器?
1编写拦截器类(实现HandlerInterceptor接口)

@Slf4j
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.debug("这是MyInterceptor拦截器的preHandle方法");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.debug("这是MyInterceptor拦截器的postHandle方法");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.debug("这是MyInterceptor拦截器afterCompletion方法");
    }
}

2.编写配置类(实现WebMvcConfigurer接口)

@Configuration
public class MvcConfig implements WebMvcConfigurer {

    /**
     * 将拦截器注册到spring ioc容器
     * @return myInterceptor
     */
    @Bean
    public MyInterceptor myInterceptor() {
        return new MyInterceptor();
    }

    /**
     * 重写该方法;往拦截器链添加自定义拦截器
     * @param registry 拦截器链
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 通过registry添加myInterceptor拦截器,并设置拦截器路径为 /*
        registry.addInterceptor(myInterceptor()).addPathPatterns("/*");
    }
}

10、SpringBoot如何整合事务和hikari连接池?
事务配置:
1.添加事务启动器依赖和MySQL依赖

        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            mysql
            mysql-connector-java
            5.1.46
        

2.编写业务类使用事务注解@Transactional

@Service
public class UserService {

    // 根据id查询
    public User queryById(Long id) {
        return new User();
    }

    @Transactional
    public void saveUser(User user) {
        System.out.println("add user...");
    }
}

数据库连接池hikari配置:
在application配置文件中指定数据库相关配置参数

Spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test
    username: root
    password: 123456

11、Spring Boot如何整合Mybatis?
1.添加启动器依赖;

        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.0.1
        

2.配置application.yml:

mybatis:
  # 实体类别名包路径
  type-aliases-package: com.september.pojo
  # 映射文件路径
  # mapper-locations: classpath:mappers/*.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

3.设置启动器类中的mapper扫描

@SpringBootApplication
// 扫描Mybatis所有业务的Mapper接口
@MapperScan("com.september.mapper")
public class Application {
    public static void main(String[] args) {
        // 启动代码
        SpringApplication.run(Application.class, args);
    }
}

12、Spring Boot如何整合通用Mapper?
通用Mapper:可以实现自动拼接sql语句;所有的mapper都不需要编写任何方法也就是不用编写sql语句。可以提高开发效率。
1.添加启动器依赖:

        
        
            tk.mybatis
            mapper-spring-boot-starter
            2.1.5
        

2.Mapper类继承Mapper接口:

public interface UserMapper extends Mapper {    

}

3.把启动类上的@MapperScan注解修改为通用mapper中自带的:

4.在User实体类上加@Table注解

//在编译阶段会根据注解自动生成对应的方法:@Data包含get/set/hashCode/equals/toString等方法
@Data
@Table(name = "tb_user")
public class User {
    @Id
    //主键回填
    @KeySql(useGeneratedKeys = true)
    private Long id;
    private String userName;
    private String password;
    private String name;
    private Integer age;
    private Integer sex;
    private Date birthday;
    private String note;
    private Date created;
    private Date updated;
}

5.改造Service类实现业务功能

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    // 根据id查询
    public User queryById(Long id) {
        return userMapper.selectByPrimaryKey(id);
    }

    // 新增保存用户
    @Transactional
    public void saveUser(User user) {
        System.out.println("add user...");
        // 选择性新增;如果属性为空则该属性不会出现在insert语句上
        userMapper.insertSelective(user);
    }
}

13、Spring Boot如何整合通用Mapper?
1.添加启动器依赖spring-boot-starter-test:

        
            org.springframework.boot
            spring-boot-starter-test
        

2.编写测试类上面,必须要添加 @SpringBootTest 注解:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {

    @Autowired
    private UserService userService;

    @Test
    public void queryById() {
        User user = userService.queryById(1L);
        System.out.println("user = " + user);
    }

    @Test
    public void saveUser() {
        User user = new User();
        user.setUserName("test");
        user.setName("test");
        user.setPassword("123456");
        user.setSex(1);
        user.setAge(20);
        user.setCreated(new Date());
        userService.saveUser(user);
    }
}

14、Spring Boot如何整合Redis?
1.添加启动器依赖;spring-boot-starter-data-redis

        
            org.springframework.boot
            spring-boot-starter-data-redis
        

2.配置application.yml中redis的连接参数

  redis:
    host: 192.168.254.128
    port: 6379

3.编写测试类应用RedisTemplate操作redis

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test() {
        //string字符串
        //redisTemplate.opsForValue().set("str","september");
        //System.out.println("str = " + redisTemplate.opsForValue().get("str"));
        redisTemplate.boundValueOps("str").set("september");
        System.out.println(redisTemplate.boundValueOps("str").get());
        //hash散列
        redisTemplate.boundHashOps("s_key").put("name", "9月");
        redisTemplate.boundHashOps("s_key").put("tuesday", 2);
        //获取所有的域
        Set set = redisTemplate.boundHashOps("s_key").keys();
        System.out.println("hash散列所有的域:" + set);
        //获取所有的值
        List list = redisTemplate.boundHashOps("s_key").values();
        System.out.println("hash散列所有的域值:" + list);
        //list列表
        redisTemplate.boundListOps("l_key").leftPush("c");
        redisTemplate.boundListOps("l_key").leftPush("b");
        redisTemplate.boundListOps("l_key").leftPush("a");
        //获取全部元素
        List l_key = redisTemplate.boundListOps("l_key").range(0, -1);
        System.out.println("列表的值:" + l_key);
        //set集合
        redisTemplate.boundSetOps("set_key").add("a", "b", "c");
        Set set_key = redisTemplate.boundSetOps("set_key").members();
        System.out.println("set集合中的所有元素:" + set_key);
        //sorted set有序集合
        redisTemplate.boundZSetOps("z_set").add("a", 30);
        redisTemplate.boundZSetOps("z_set").add("b", 20);
        redisTemplate.boundZSetOps("z_set").add("c", 10);
        Set z_set = redisTemplate.boundZSetOps("z_set").range(0, -1);
        System.out.println("zset有序集合中的所有元素:" + z_set);
    }
}

15、Spring Boot项目如何进行部署?
1.在pom文件添加打包插件将项目中的资源、配置、依赖包打成一个jar包

    
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

2.使用maven的package进行打包



3.部署运行:java -jar 包名

你可能感兴趣的:(Spring Boot)