栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

总结之Spring Boot通过Start自定义组件开发

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

总结之Spring Boot通过Start自定义组件开发

Start自定义组件简介 步骤

创建 Maven 项目, 目录结构如下

添加pom.xml依赖(可以根据组件功能添加其他依赖)


        
            org.springframework.boot
            spring-boot-starter-data-redis
            1.5.6.RELEASE
            
                
                    io.lettuce
                    lettuce-core
                
            
        
        
            redis.clients
            jedis
        
        
            org.springframework.boot
            spring-boot-starter
        

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

        
            com.alibaba.boot
            nacos-config-spring-boot-starter
            0.2.7
            
                
                    org.springframework.boot
                    spring-boot-starter
                
            
        
    
配置自定义组件启动类

spring.factories文件(文件名称不能变)
注意:meta-INF是自己手动创建的目录,spring.factories也是手动创建的文件,在该文件中配置自己的自动配置类

org.springframework.boot.autoconfigure.EnableAutoConfiguration=
cn.space.assembly.cache.RedisAutoConfigure

启动类 RedisAutoConfigure.java
启动类内部可以配置需要bean ,把bean实例化等操作

@EnableCaching
@EnableNacosConfig
@EnableConfigurationProperties({RedisProperties.class, RedisPoolProperties.class, CacheManagerProperties.class})
public class RedisAutoConfigure {
    @Autowired
    private CacheManagerProperties cacheManagerProperties;
    @Autowired
    public RedisProperties redisProperties;
    @Autowired
    public RedisPoolProperties redisPoolProperties;

    public RedisAutoConfigure() {
    }
 	@Bean
    @ConditionalOnMissingBean(RedisRepository.class)  // 当容器中没有指定Bean的情况下,自动配置RedisRepository类
    public RedisRepository redisRepository(){
        RedisRepository redisRepository= new RedisRepository(redisPoolProperties);
        return redisRepository;
    }

    @Bean(name = "poolConfig")
    public JedisPoolConfig poolConfig() {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(this.redisPoolProperties.getMaxIdle());
        poolConfig.setMaxWaitMillis(this.redisPoolProperties.getMaxWait());
        poolConfig.setMaxTotal(this.redisPoolProperties.getMaxTotal());
        poolConfig.setTestOnBorrow(this.redisPoolProperties.isTestOnBorrow());
        return poolConfig;
    }
    ....
    ....

可以拿组件的配置参数(非必须)

@ConfigurationProperties(
        prefix = "spring.redis"
)
public class RedisProperties {
    private int database = 0;
    private String url;
    private String host = "localhost";
    private String password;
    private int port = 6379;
    private boolean ssl;
    private int timeout;
    private org.springframework.boot.autoconfigure.data.redis.RedisProperties.Pool pool;
    private org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel sentinel;
    private org.springframework.boot.autoconfigure.data.redis.RedisProperties.Cluster cluster;

最后将项目打包 mvn clean install 在另一个项目中添加这个主键依赖,组件的类就实例化了可以调其中的方法

	cn.space
    assembly-cache-starter
    1.0-SNAPSHOT

测试组件使用
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisRepositoryTests {
	@Autowired
	@SuppressWarnings("ALL")
	private RedisRepository redisRepository ;

	@Test
	public void testGet() {
		RedisRepository.get("startKey");
	}

}
在application.properties加配置

使用Spring官方的Starter时通常可以在application.properties中来配置参数覆盖掉默认的值。

spring.redis.url = xxxxx

spring.redis.host = xxxxx

spring.redis.password= xxxxx

spring.redis.port = xxxxx
补充

可以通过注解条件来控制组件是否初始化,初始化动作

@ConditionalOnSingleCandidate	当给定类型的bean存在并且指定为Primary的给定类型存在时,返回true
@ConditionalOnMissingBean	当给定的类型、类名、注解、昵称在beanFactory中不存在时返回true.各类型间是or的关系
@ConditionalOnBean	与上面相反,要求bean存在
@ConditionalOnMissingClass	当给定的类名在类路径上不存在时返回true,各类型间是and的关系
@ConditionalOnClass	与上面相反,要求类存在
@ConditionalOnCloudPlatform	当所配置的CloudPlatform为激活时返回true
@ConditionalOnexpression	spel表达式执行为true
@ConditionalOnJava	运行时的java版本号是否包含给定的版本号.如果包含,返回匹配,否则,返回不匹配
@ConditionalOnProperty	要求配置属性匹配条件
@ConditionalOnJndi	给定的jndi的Location 必须存在一个.否则,返回不匹配
@ConditionalOnNotWebApplication	web环境不存在时
@ConditionalOnWebApplication	web环境存在时
@ConditionalOnResource	要求制定的资源存在

可以通过必须某类的实例来控制组件是否自动加载,
在主项目启动类上加自定义注解,注解作用是实例化某类,去掉注解就不自动加载组件了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345076.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号