java - Soalan dalam druid-spring-boot-starter
曾经蜡笔没有小新
曾经蜡笔没有小新 2017-07-05 10:26:11
0
1
1223

Pos kod dulu

@Configuration
@ConditionalOnClass(com.alibaba.druid.pool.DruidDataSource.class)
@EnableConfigurationProperties(DruidStatProperties.class)
@Import({DruidSpringAopConfiguration.class,
         DruidStatViewServletConfiguration.class,
         DruidWebStatFilterConfiguration.class})
public class DruidDataSourceAutoConfigure {

    @Bean
    @ConfigurationProperties("spring.datasource.druid")
    @ConditionalOnMissingBean
    public DataSource dataSource(Environment env) {
        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();

        //if not found prefix 'spring.datasource.druid' settings,'spring.datasource' prefix settings will be used.
        if (dataSource.getUsername() == null) {
            dataSource.setUsername(env.getProperty("spring.datasource.username"));
        }
        if (dataSource.getPassword() == null) {
            dataSource.setPassword(env.getProperty("spring.datasource.password"));
        }
        if (dataSource.getUrl() == null) {
            dataSource.setUrl(env.getProperty("spring.datasource.url"));
        }
        if (dataSource.getDriverClassName() == null) {
            dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
        }
        // set filters default value on StatViewServlet enabled.
        if (! "false".equals(env.getProperty("spring.datasource.druid.StatViewServlet.enabled"))) {
            try {
                dataSource.setFilters("stat");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return dataSource;
    }
}
public class DruidDataSourceBuilder {

    private Map<String, String> properties = new HashMap<String, String>();

    public static DruidDataSourceBuilder create() {
        return new DruidDataSourceBuilder();
    }

    public DruidDataSource build() {
        DruidDataSource dataSource = new DruidDataSource();
        maybeGetDriverClassName();
        bind(dataSource);
        return dataSource;
    }

    //use spring boot relaxed binding by reflection config druid . detail see Spring Boot Reference Relaxed binding section.
    private void bind(DruidDataSource result) {
        MutablePropertyValues properties = new MutablePropertyValues(this.properties);
        new RelaxedDataBinder(result)
                .withAlias("url", "jdbcUrl")
                .withAlias("username", "user")
                .bind(properties);
    }

    private void maybeGetDriverClassName() {
        if (!this.properties.containsKey("driverClassName")
                && this.properties.containsKey("url")) {
            String url = this.properties.get("url");
            String driverClass = DatabaseDriver.fromJdbcUrl(url).getDriverClassName();
            this.properties.put("driverClassName", driverClass);
        }
    }
}

Apa yang saya tidak faham ialah kaedah maybeGetDriverClassName dari DruidDataSourceBuilder Jelas sekali, apabila kaedah dataSource dalam DruidDataSourceAutoConfigure digunakan dalam DruidDataSourceBuilder, sifat dalam DruidDataSourceBuilder's tidak mempunyai atribut kes ini, mungkin DATASourceBuilder.
Maksud lain ialah penghakiman dalam kaedah dataSource DruidDataSourceAutoConfigure DataSource tidak sepatutnya mempunyai atribut yang disuntik dalam kaedah ini.

曾经蜡笔没有小新
曾经蜡笔没有小新

membalas semua(1)
过去多啦不再A梦

Mungkin ia memberi ruang untuk menambah hartanah lain pada hartanah pada masa hadapan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan