[springboot 2019-10-23] 自定义springboot自动配置

1.创建springboot 3个关键类

1.1 属性读取类:用于从配置文件中读取配置信息

package com.shijt.springbootdemo.jdbc;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "mysql.jdbc")
public class JDBCRead {
    private String driver;
    private String url;
    private String username;
    private String password;

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    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;
    }
}

1.2 核心事件类

package com.shijt.springbootdemo.jdbc;

import java.sql.*;

public class JDBCUtils {
    private String driver;
    private String url;
    private String username;
    private String password;

    public int testJdbc(){

        Connection con = null;
        try{
            //加载MySql的驱动类
            Class.forName("com.mysql.jdbc.Driver") ;
            con = DriverManager.getConnection(url , username , password ) ;       //仅做测试,直接写死了sql
            String sql="INSERT INTO `smbms_user` (`id`, `userCode`, `userName`) VALUES (‘001‘, ‘001‘, ‘zhangsan‘)";
            PreparedStatement pstmt = con.prepareStatement(sql) ;
            int rows = pstmt.executeUpdate() ;
            pstmt.close();
            return rows;
        }catch(ClassNotFoundException e){
            System.out.println("找不到驱动程序类 ,加载驱动失败!");
            e.printStackTrace() ;
        }catch(SQLException se){
            System.out.println("数据库连接失败!");
            se.printStackTrace() ;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (con != null){
                try {
                    con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return 0;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    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;
    }
}

1.3 整合类:把属性读取类中的属性赋值给核心事件类

package com.shijt.springbootdemo.jdbc;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;

@Configuration
@EnableConfigurationProperties({JDBCRead.class})
@ConditionalOnClass({JDBCUtils.class })
@ConditionalOnProperty(prefix="mysql.jdbc",value = "enabled",matchIfMissing = true)
public class JDBCAutoConfigration {
    @Resource
    private JDBCRead jdbcRead;

    @Bean
    @ConditionalOnMissingBean({JDBCUtils.class})
    public JDBCUtils getJDBCUtils(){
        //确定方法执行的时间(在springboot启动时,而不是调用JDBCUtils时)
        System.out.println("-----step into JDBCAutoConfigration getJDBCUtils-----");
        JDBCUtils jdbcUtils=new JDBCUtils();
        jdbcUtils.setDriver(jdbcRead.getDriver());
        jdbcUtils.setUrl(jdbcRead.getUrl());
        jdbcUtils.setUsername(jdbcRead.getUsername());
        jdbcUtils.setPassword(jdbcRead.getPassword());
        return jdbcUtils;
    }
}

2.在resources目录下META-INF文件夹,创建spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.shijt.springbootdemo.jdbc.JDBCAutoConfigration

把写好的整合类加入到自动配置中

3.编写Controller类,调用JDBCUtils

package com.shijt.springbootdemo.controller;

import com.shijt.springbootdemo.jdbc.JDBCUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

@Controller
public class UserController {
    @Resource
    private JDBCUtils jdbcUtils;

    @RequestMapping("/testJdbc")
    @ResponseBody
    public int testJdbc(){
        return jdbcUtils.testJdbc();
    }

}

在appliaction.yml中配置数据库连接信息

mysql:
  jdbc:
    driver: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456

4.启动springboot,测试

原文地址:https://www.cnblogs.com/shijt/p/11725627.html

时间: 2024-11-05 21:42:25

[springboot 2019-10-23] 自定义springboot自动配置的相关文章

2019 10 23专业英语-王菲

计算机工作过程 如果想让计算机工作,就得先把程序编辑出来,然后通过输入设备送到储存器保存起来,即程序储存下面就是执行程序的问题.根据冯诸依曼得设计,计算机应能自动执行程序,而执行程序又归结为逐条行力指令,只剩条指令有分为以下四个操作 取出指令:从储存器对某个地址中去除要执行的命令送到CPU内部的指令寄存器暂存 分析指令:把保存的指令寄存器中的指令送到指令译码器溢出,该指令对应的操作 执行指令:根据指令译码部分发出相应的控制器,完成指令规定的各种操作. 为执行下一条指令做好准备机取出下一条指令地址

2019—10—23 张峻溪 专业英语

现在的社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物,大数据并不在大,而在于“有用”.价值含量,挖掘成本比数量更为重要.利用这些大规模数据是赢得竞争的关键. 大数据的价值体现在以下几个方面 (1)对大量消费者提供产品或服务的企业可以利用大数据进行精准营销. (2)做小而美模式的企业可以利用大数据做服务转型. (3)面临互联网压力之下必须转型的传统企业需要与时俱进. 数据只有对实体行为产生影响时才成为信息. 暂时存储数据 安

2019.10.23 王俊懿_专业英语

固态硬盘原理是一种主要以内存作为永久性存储器的计算机存储设备,此处固态主要相对以机械臂带动磁头转动,实现读写操作的磁盘而言.,NAND和其他固态储以电位高低或者相位状态的不同记录0和1 如果想让计算机工作,就得先把程序编出来,然后通过输入设备送到存储器保存起来.即程序存储下面就是执行程序的问题,根据冯诺依曼的设计,计算机应能自动执行程序,而执行程序又归结为逐条执行指令.执行条指令又可分为以下四个基本操作: (1)取出指令:从存储器某个地址中取出要执行的指令送到CPU内部的指令寄存器暂存. (2)

2019.10.23题解

A. Smooth 标签: 队列 题解: 直接口胡一下算法过程吧: 开B个队列,先在第一个队列里加入1,之后每次取出这B个队列里最小的数x, x便为最小的光滑数,i从小到大枚举并用x*p[i]更新第i个队列, 为了不重复,要用每个数的最小质因子更新即当p[i]|x停止, 因为x一定比上次取出的y要大,所以可以保证每个队列都是单调的, 复杂度$ O(BK) $ B. Six 标签: 记忆化搜索 题解: 设f[i][j]代表已选的质因子集合为i,出现在两个不同的数里的质因子对集合为j的方案数, 记忆

基于springboot的多数据源自动配置实现

最近做了一个自动支持多数据源配置的功能,基于springboot生态扩展,可自动识别配置文件中的数据库配置参数,并进行autoconfig. multiple-datasource多数据源支持模块 功能性 支持自动化配置多个数据源: 支持自动化配置持久层框架(mybatis): 支持自动化配置分布式事务管理器(JTA-Atomikos): 支持不同数据源使用不同数据库: 支持不同数据源使用不同数据库且使用不同连接池(hikari.dbcp2.tomcat-pool.druid等): 支持自动适配

SpringBoot日记——SpringMvc自动配置与扩展篇

为了让SpringBoot保持对SpringMVC的全面支持和扩展,而且还要维持SpringBoot不写xml配置的优势,我们需要添加一些简单的配置类即可实现: 通常我们使用的最多的注解是: @Bean @Component 配置后的类就是我们要写在容器中的一些配置:详情后续再说,或者你也可以参考官方文档 关于扩展 这里我们说一下如何做扩展呢,先看一下原先在SpringMvc中我们是如何写的,来看XML(这是一段关于路径映射和拦截器的简单配置,访问hello路径也展示success.html的页

通过Spring Boot整合Mybatis分析自动配置详解

前言 SpringBoot凭借"约定大于配置"的理念,已经成为最流行的web开发框架,所以有必须对其进行深入的了解:本文通过整合Mybatis类来分析SpringBoot提供的自动配置(AutoConfigure)功能,在此之前首先看一个整合Mybatis的实例. SpringBoot整合Mybatis 提供SpringBoot整合Mybatis的实例,通过Mybatis实现简单的增删改查功能: 1.表数据 CREATE TABLE `role` (  `note` varchar(2

006 自动配置

一 .概述 在springboot之中最令我们喜欢的特性大概就是自动配置了.springboot根据自动配置帮助我们实现整个开发环境的配置,这可以让我们不需要每次都完成那些重复的配置工作了. 本此,我们就分析一下自动配置的原理. 二 .程序的启动类 @SpringBootApplication public class SpringbootRunnerClass { public static void main(String[] args) { SpringApplication.run(Sp

Spring Boot 自动配置之@Conditional的使用

Spring Boot自动配置的"魔法"是如何实现的? 转自-https://sylvanassun.github.io/2018/01/08/2018-01-08-spring_boot_auto_configure/ Spring Boot是Spring旗下众多的子项目之一,其理念是约定优于配置,它通过实现了自动配置(大多数用户平时习惯设置的配置作为默认配置)的功能来为用户快速构建出标准化的应用.Spring Boot的特点可以概述为如下几点: 内置了嵌入式的Tomcat.Jett