- Resource Conditions
- Web Application Conditions
@ConditionalOnWarDeployment注解根据应用程序是否是部署到容器中的传统WAR应用程序来包含配置 。此条件不适用于与嵌入式服务器一起运行的应用程序 。
- SpEL Expression Conditions
创建自己的Starter
- 命名
根据经验 , 你应该在starter之后命名一个组合模块 。例如 , 假设你正在为“acme”创建一个starter程序 , 并且你将自动配置模块命名为acme-spring-boot , 而starter程序命名为acme-spring-boot-starter 。如果只有一个模块组合了这两个模块 , 请将其命名为acme-spring-boot-starter 。
- 配置key
为每个属性添加JAVAdoc , 确保配置项有文档记录 , 如下面的例子所示 。
@ConfigurationProperties("acme")public class AcmeProperties {/*** Whether to check the location of acme resources.*/private boolean checkLocation = true;/*** Timeout for establishing a connection to the acme server.*/private Duration loginTimeout = Duration.ofSeconds(3);}
- 完整示例
自动配置类
@Configuration@EnableConfigurationProperties(LogsProperties.class)@ConditionalOnProperty(prefix = "logs", name = "enabled", havingValue = https://www.isolves.com/it/cxkf/kj/2023-03-02/"true")@EnableAspectJAutoProxypublic class LogsAutoConfiguration {private static final Logger logger = LoggerFactory.getLogger(LogsAutoConfiguration.class) ;@Resourceprivate LogsProperties logsProperties ;@Beanpublic AspectJExpressionPointcutAdvisor logAdvisor() {AspectJExpressionPointcutAdvisor advisor = new AspectJExpressionPointcutAdvisor() ;logger.info("执行表达式:{}", logsProperties.getPointcut()) ;advisor.setExpression(logsProperties.getPointcut()) ;advisor.setAdvice(new SystemAroundOperator()) ;return advisor ;}}
自定义注解@Documented@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface SystemLog {/*** <p>操作说明</p>* @return*/String value() default "" ;}
属性key配置/** *日志功能属性配置 *@author xg */@ConfigurationProperties(prefix = "logs")public class LogsProperties {/***切入点定义<br/>*示例:execution(public * com.pack.controller.*.*(..))*/private String pointcut ;/***是否开启日志功能*/private boolean enabled = true ;}
Advice定义public class SystemAroundOperator implements MethodInterceptor {private static final Logger logger = LoggerFactory.getLogger(SystemAroundOperator.class);@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {// 开始执行时间long start = System.currentTimeMillis();Method method = invocation.getMethod() ;SystemLog annoLog = null ;if (method.isAnnotationPresent(SystemLog.class)) {annoLog = method.getAnnotation(SystemLog.class) ;String value = https://www.isolves.com/it/cxkf/kj/2023-03-02/annoLog.value() ;try {Object result = invocation.proceed() ;// 方法执行时间Long execTime = System.currentTimeMillis() - start ;logger.info("{}, 业务执行时间:{} ms", value, execTime) ;return result ;} catch (Throwable t) {Long execTime = System.currentTimeMillis() - start ;logger.info("{}, 业务执行时间:{} ms , 发生异常信息:{}", value, execTime, t.getMessage()) ;throw t ;}}return invocation.proceed();}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 台式电脑怎么设置自动关机时间 电脑怎么设置自动关机时间
- 如何取消黄钻自动续费 如何取消黄钻
- 全自动管道过滤器厂家 自动清洗过滤器
- 长安奔奔自动挡油耗;长安奔奔自动挡挂档就熄火怎么回事?
- 智能仓储 自动化仓储设备
- 手自一体跟自动有什么区别吗 手自一体和自动挡的区别在哪里
- 性用品自动售卖机价格 智能机器人伴侣
- 能自动挂机打怪的端游 可以挂机的游戏
- 斑马gk888t打印机无法打印 斑马打印机驱动
- 自动喷漆机 往复式喷漆机