spring boot中@EnableXXX注解的做法

接触springboot也有一阵子了,之前就觉得@EnableXX的注解很酷炫,于是就简单研究了一下,可以给自己的模块加上这个功能

以下是一个简单的实现,只要在spring boot启动类上加上@EnableHello就能在启动完的时候输出”Hello Spring Boot”了

首先要有一个@EnableHello注解类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package io.loli.demo.enable;

import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

/**
* @author choco
*/


@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import({HelloConfigurationSelector.class})
public @interface EnableHello {
}

这里用到了HelloConfigurationSelector

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package io.loli.demo.enable;

import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;

/**
* @author choco
*/

public class HelloConfigurationSelector implements ImportSelector {
@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
return new String[]{HelloConfiguration.class.getName()};
}
}

这个ImportSelector接口挺有意思的,大家有兴趣可以深入研究下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package io.loli.demo.enable;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* @author choco
*/

@Configuration
@ConfigurationProperties(prefix = "hello")
public class HelloConfiguration {
private String message;

@Bean
public CommandLineRunner commandLineRunner() {
return args -> System.out.println(message);
}

public void setMessage(String message) {
this.message = message;
}
}

如上就是这个小工程的三个主角了,打包install之后,就可以在别的工程里用了

再新建一个Springboot工程,在启动类上添加@EnableHello注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package io.loli.demo.test;

import io.loli.demo.enable.EnableHello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableHello
public class HelloTestApplication {

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

}
1
hello.message=Hello Spring Boot

运行这个类,就会输出hello.message中的Hello Spring Boot字符串了

从2015到2016

辞职

从之前的公司辞职了,4月1日的时候入职新公司,在国内某快递公司做Java开发,微服务相关的,通俗点讲就是做接口的。嘛过的还行,除了不加班,其他没啥优势,这次年后调薪也只给我涨了15%,如果明年还是涨这么多的话可以考虑跳槽了。

Spring Cloud学习笔记——Netflix的那些东西

最近微服务好像很火的样子,我司是用阿里的dubbo来搭建微服务的,最初感觉好牛叉的样子,但入职一年接触到现在的感觉是 阿里的东西bug太多了,比如我之前给fastjson提交了个非常猎奇的bug(到现在都没有回复,对阿里的好感度已经降到底了)

Netflix的这些东西也是搞微服务用的,大约有这些东西Zuul、Eureka、Ribbon、Hystrix、Feign,花了一个下午整了个简单的demo。

Spring Cloud学习笔记——Spring Cloud Config的使用(1)

最近迷上了Spring Cloud,动态路由、负载均衡、服务发现,各种功能,觉得可以替换我司目前使用的任务调度和微服务了,我司任务调度用的是tb-schedule(基于zookeeper),微服务是自己用dubbo实现的。

实际开发中对于任务分片用的很少,而是对于查询出数据后,如何高效地处理这些数据的问题。tb-schedule想要多线程的话,只能配置多个任务项,导致查询数据的时候必须根据任务项去区分开来。