springboot(一)

本文详细介绍了如何在Springboot项目中通过自定义配置类和属性类实现连接池的配置,并展示了两种获取连接对象的方法:直接替换默认配置和使用@ConfigurationProperties。此外,还讨论了配置生效的条件及不同配置文件的应用。
摘要由CSDN通过智能技术生成

目录

一、springboot的启动类

二、controller层

 三、springboot的配置文件

springboot中配置生效的条件

下面演示通过配置类拿到连接对象的几种方法:

方式一:直接使用自定义配置类替换默认配置

方式二:配置类里面再使用属性类,二者搭配使用


一、springboot的启动类

@SpringbootConfiguration注解的作用


/*//开启自动配置
@EnableAutoConfiguration
//加入包扫描
@ComponentScan*/
/**
 * 以上常规的注解其实也是对springboot来说是一个侵入!
 * 那么我们完全可以利用springbootApplication注解来代替
 *
 * 一个@SpringBootApplication(scanBasePackages="扫描路径")注解等同于三个注解:
 *
 * @SpringBootConfiguration,表示当前类完全可以作为配置类来使用。
 * 相当于ssm时期的完全注解开发时的@Configuration。
 *
 * @EnableAutoConfiguration
 *
 * @ComponentScan("扫描路径"),如果不写默认就是扫描当前类所在包和他的子包。
 */
@SpringBootApplication
public class SpringbootDemoApplication {

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

}

项目结构:注意项目的启动类一定要放在项目工程的根包下。

二、controller层

控制层案例:使用restFul风格的请求实现对控制器方法的访问。

/**
 * @author Dragon code!
 * @create 2022-04-25 15:40
 */
@RestController
public class MyController {
    //外部的请求不需要带上后缀例如.do
    //对中央调度器的配置url-pattern内容指定为 "/"
    //配成"/"的主要作用可以从外部向控制器发restFul风格的请求
    //restFul风格的参数在url上用/代替原来的?
    @RequestMapping("/hello/{id}")
    public String hello(@PathVariable int id) {
        System.out.println("id = " + id);
        return "hello world";
    }

}

 

 三、springboot的配置文件

springboot采用的是自动配置的方式,它没有使用xml文件来写配置,使用的是java配置的方式

 下面来对源码进行跟踪:

 在springboot中存在这一份依赖,用来实现自动化配置的功能。

 找到:位于

package org.springframework.boot.autoconfigure.web.servlet下的类

 上面这个类就是springboot的springmvc的自动配置类(mvc模块的配置类)

 其实还有好多下面就不一一说明了,针对每一种配置都有它自己的配置类!

//表示当前是配置类
@Configuration
//基于web应用的配置
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
//表示如果依赖中有Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class这三个类的话
//那么该配置就要生效
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
//排除具有的内容,没有这个bean那么就生效
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
//执行顺序号,按顺序执行
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, TaskExecutionAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {
    public static final String DEFAULT_PREFIX = "";
    public static final String DEFAULT_SUFFIX = "";
    private static final String[] SERVLET_LOCATIONS = new String[]{"/"};

    public WebMvcAutoConfiguration() {
    }

    //以下是springmvc中的某一个配置,其实还有好多
    //jsp的视图解析器
    @Bean
    @ConditionalOnMissingBean({HiddenHttpMethodFilter.class})
    @ConditionalOnProperty(
        prefix = "spring.mvc.hiddenmethod.filter",
        name = {"enabled"},
        matchIfMissing = true
    )
    public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() {
        return new OrderedHiddenHttpMethodFilter();
    }

springboot中配置生效的条件

  • 添加了相关的启动器
  • 在配置文件中没有覆盖默认的配置的配置

下面演示通过配置类拿到连接对象的几种方法:

方式一:直接使用自定义配置类替换默认配置

前提:我们把默认配置里的配置给注释掉:

使用jdbc.properties配置文件

jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.userName = root
jdbc.password = abc123
jdbc.url = jdbc:mysql://localhost:3306/music?serverTimezone=Asia/Shanghai

JdbcConfig配置类

要给配置类加上PropertySource指定配置文件的位置,那么接下来就可以使用@Value注解给属性赋值了!

将我们的方法加上bean注解表示将方法放入bean容器进行管理,bean的id就是方法名。

/**
 * @author Dragon code!
 * @create 2022-04-25 16:54
 */
@Configuration
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
    @Value("${jdbc.driverClassName}")
    private String driverClassName;
    @Value("${jdbc.userName}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;
    @Value("${jdbc.url}")
    private String url;

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

由于配置类中已经注册过方法的bean了,所以我们在controller类中可以直接自动注入然后拿到连接池对象

/**
 * @author Dragon code!
 * @create 2022-04-25 15:40
 */
@RestController
public class MyController {
    //外部的请求不需要带上后缀例如.do
    //对中央调度器的配置url-pattern内容指定为 "/"
    //配成"/"的主要作用可以从外部向控制器发restFul风格的请求
    //restFul风格的参数在url上用/代替原来的?

    @Autowired
    private DruidDataSource dataSource;
    @RequestMapping("/test/{id}")
    public String test(@PathVariable int id) {
        System.out.println("id = " + id);
        DruidPooledConnection connection = null;
        try {
            connection = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println("connection = " + connection);
        return "ok";
    }

}

成功拿到连接池对象!

方式二:配置类里面再使用属性类,二者搭配使用

因为直接在配置类中写大量的value其实是非常的不美观的。

jdbcProperty属性类的重点在于@ConfigurationProperties注解,指定读取文件中属性的前缀是jdbc

那么他会自动到默认配置文件中拿到属性值并注入到属性中

但是要注意我们的属性名一定要和配置文件的名字保持一致!

/**
 * @author Dragon code!
 * @create 2022-04-25 17:07
 */

//jdbc的属性类
@ConfigurationProperties(prefix = "jdbc")
public class jdbcProperty {

    private String driverClassName;

    private String userName;

    private String password;

    private String url;

    public String getDriverClassName() {
        return driverClassName;
    }

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

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

    public String getUrl() {
        return url;
    }

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

配置文件:此处演示properties配置方式

application.properties

jdbc.driverClassName= com.mysql.jdbc.Driver
jdbc.username = root
jdbc.password = abc123
jdbc.url = jdbc:mysql://localhost:3306/music?serverTimezone=Asia/Shanghai

配置类代码:

/**
 * @author Dragon code!
 * @create 2022-04-25 16:54
 */
@Configuration
//在配置类中引入属性类
@EnableConfigurationProperties(jdbcProperty.class)
public class JdbcConfig1 {
    //自动注入属性类,属性注入,前提是要加@EnableConfigurationProperties(jdbcProperty.class)
    @Autowired
    private jdbcProperty jdbcProperty;

    //构造方法注入
    public JdbcConfig1(com.lay.boot1.config.jdbcProperty jdbcProperty) {
        this.jdbcProperty = jdbcProperty;
    }

    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName(jdbcProperty.getDriverClassName());
        druidDataSource.setUsername(jdbcProperty.getUserName());
        druidDataSource.setPassword(jdbcProperty.getPassword());
        druidDataSource.setUrl(jdbcProperty.getUrl());
        return druidDataSource;
    }
}

使用yml配置文件的方法读取属性值:

server:
  port: 8081

  #spring:
  #  datasource:
  #    driver-class-name: com.mysql.jdbc.Driver
  #    password: abc123
  #    type: com.alibaba.druid.pool.DruidDataSource
  #    url: jdbc:mysql://localhost:3306/music?serverTimezone=Asia/Shanghai
  #    username: root
  #
  #    #解决时差问题
  #    jackson:
  #      date-format: yyyy-MM-dd HH:mm:ss
  #      time-zone: GMT+8


jdbc:
  driverClassName: com.mysql.jdbc.Driver
  password: abc123
  type: com.alibaba.druid.pool.DruidDataSource
  url: jdbc:mysql://localhost:3306/music?serverTimezone=Asia/Shanghai
  username: root

 结果是依然可以拿到对象,注意yml文件语法中只能使用空格不能使用tab键!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值