关于Spring boot jdbc问题
老师好,因为我们目前学Spring boot使用的是application.properties的配置模式,在做jdbc的资料库绑定时,并没有像先前使用xml声明bean注入的方式,例如:
xml
<bean id="dataSource01" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/jdbc_imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean> <bean id="jdbcTemplate01" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean>
透过xml配置我可以知道jdbcTemplate使用的是dataSource01这个类,但在properties中只有下列这些参数,请要如何将指定的dataSource注入我想要使用的jdbcTemplate中呢?
又Spring boot如何自动的将下面的datasource自动注入到jdbctemplate中呢?
(我看了第三方范例的properties也是这样写,并且使用@Autowired注解就可以直接操作jdbctemplate,因此无法理解为何他就知道要注入那个?)
//datasource spring.datasource.url=jdbc:mysql://localhost:3306/jdbc_imooc?useUnicode=true&characeterEncoding=utf-8&serverTimezone=Asia/Shanghai // info spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
正在回答
同学你好,
1、Spring Boot中如果在配置文件里写了某些东西,它是能够自动读取到某一个类作为属性的,就比如说:同学提及的这些数据库的一些配置,我们是需要在Spring Boot的一个依赖里,这个依赖通常命名xxx.starter,像jdbc它就有jdbcstarter在依赖里面,然后,在这个starter里面会定义某一个类,它就是被自动配置的。
2、这个被自动配置的类,Spring Boot就会去把它给加载进来,加载进来的时候还有一些其他的配置,比如说:properties等,有了这些配置之后,Spring Boot在启动的时候,它就会去这个配置文件application.properties里面去找有没有对应的属性被这个用户写了,如果写了的话,就把它给读取进来,并且放到这个类里面。这是一套相对复杂的过程,在写starter的时候,就会去指定某一个类作为自动配置,这个自动配置的时候也会去指定说,这个前缀是什么,如果指定了数据库的这个配置,那么这个类被spring boot自动加载配置了,于是类里就有一些属性,如:IP,端口号等
3、这些属性就代表说有可能会被property里面的属性所匹配上的,就是通过这一步,它建立了一个类的匹配关系,那么这个类有了,这个类是是我们写的,但是这个类它所对应的这个前缀,也是需要规定的。相当于就是通过这样的一个流程,把我们需要自动配置的这个类去指定好,并且它在配置文件中的这个前缀去指定好,这样的话,只要我们在配置文件里写了这样的一个前缀,那么Spring Boot就会去读取到并且识别出这个是要匹配到这个类里的
4、上述内容并不是简单几句就可以阐述明白的 ,因为它涉及的内容是原理,同学如果有兴趣的话,可以去搜索这部分内容的知识点,如:Spring Boot自动配置原理,或者自定义Spring Boot Starter
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星