Spring Boot 示例节选

        前段时间比较热衷于架构方面的知识,微服务自然不再话下。我学东西向来不会勉强自己,任何事情总是有个过程,从听说Spring Boot 到了解,到学习,到实践每一个环节都有不同的理解,温故而知新,简单总结一下。

        接触SpirngBoot前大都接触的是SSH,SSM之类的框架组合,搭建一个SSM框架应该考虑到每个独立的开源项目在该项目中扮演的角色,其次该框架所管理的逻辑范围以SSM(Spring,SpringMVC,MyBatis)为例:

  1. Spring扮演一个全局的管理者角色,IOC容器能够很出色的完成这个任务,可以说任何JavaBean对象都可以被IOC容器管理起来,常见的连接池对象、单例对象、Service对象、事物对象、等等,由于Spring的特性可以让一个应用程序以比较特殊的方式来运行示例如下:
    @Component
    @PropertySource("classpath:conf/kafka.properties")
    public class KafkaUtil implements ApplicationContextAware {
    	public static Logger Log = Logger.getLogger(KafkaUtil.class);
    	@Value("${tvc.kafka.enable}")
    	private Boolean useKafka;
    
    	public Boolean getUseKafka() {
    		return useKafka;
    	}
    
    	public void setUseKafka(Boolean useKafka) {
    		this.useKafka = useKafka;
    	}
    
    	@Value("${tvc.kafka.zkHost}")
    	private String zkHost;
    	@Value("${tvc.kafka.group}")
    	private String group;
    	@Value("${tvc.kafka.topic}")
    	private String topic;
    	@Value("${tvc.kafka.numThread}")
    	private Integer numThreads;
    	@Value("${tvc.kafka.autooffset.reset}")
    	private String autoOffset;
    
    	public String getAutoOffset() {
    		return autoOffset;
    	}
    
    	public void setAutoOffset(String autoOffset) {
    		this.autoOffset = autoOffset;
    	}
    
    	private ConsumerConnector consumer;
    	private ExecutorService executor;
    
    	@PostConstruct
    	public void init() {
    
    		if (!useKafka) {
    			Log.debug("Kafka Module Is Disabled!");
    			return;
    		}
    		consumer = Consumer.createJavaConsumerConnector(createConsumerConfig(zkHost, group, autoOffset));
    		Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
    		topicCountMap.put(topic, new Integer(numThreads));
    		Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
    		List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(topic);
    		executor = Executors.newFixedThreadPool(numThreads);
    		for (final KafkaStream<byte[], byte[]> stream : streams) {
    			ThreadWork threadWork = context.getBean(ThreadWork.class, stream);
    			// ThreadWork threadWork = new ThreadWork(stream);
    			executor.submit(threadWork);
    		}
    	}
    
    	private static ConsumerConfig createConsumerConfig(String zookeeper, String groupId, String autoOffset) {
    		Properties props = new Properties();
    		props.put("zookeeper.connect", zookeeper);
    		props.put("group.id", groupId);
    		props.put("auto.commit.interval.ms", "1000");
    		props.put("zookeeper.session.timeout.ms", "400");
    		props.put("zookeeper.sync.time.ms", "2000");
    		props.put("auto.commit.interval.ms", "1000");
    		props.put("auto.offset.reset", autoOffset);
    		props.put("fetch.size", "" + (1024 * 1024 * 5));
    		Log.debug("Kafka Params:" + props.toString());
    		return new ConsumerConfig(props);
    	}
    
    	@Override
    	public String toString() {
    		return "KafkaUtil [zkHost=" + zkHost + ", group=" + group + ", topic=" + topic + ", numThreads=" + numThreads
    				+ ", consumer=" + consumer + ", executor=" + executor + "]";
    	}
    
    	private ApplicationContext context;
    
    	@Override
    	public void setApplicationContext(ApplicationContext context) throws BeansException {
    		this.context = context;
    	}
    
    }

  2. Spring MVC与Spring一脉相承,其简洁更加轻量级的配置在MVC框架中脱颖而出,不再赘述。
  3. MyBatis一解Hibernate的高度封装性,更加灵活和轻量级,笔者曾使用过Spring的JDBC框架也环视满容易上手的,值得一试。

      继续来说说SpringBoot,首先应该为它的便捷而喝彩,一句话SpringBoot 组合了Spring+SpringMVC等通过一系列的注解和Maven POM文件将常用的开源组件很好的整合起来,为迅速的搭建一个混合框架寻得一条出路。示例如下:

@SpringBootApplication
@ImportResource("classpath:conf/spring.xml")
public class TvcCloudToJM {
	public static void main(String[] args) {
		if (Lock.isLocking("jm.lock")) {
			System.out.println("One Instance Already Running!!");
			System.exit(1);
		}
		final ConfigurableApplicationContext context = SpringApplication.run(TvcCloudToJM.class, args);
		Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
			@Override
			public void run() {
				context.stop();
			}
		}));
	}
}

上述代码将启动一个SpringBoot的应用程序,无缝集成Spring,SpringMVC等框架。总结如下:

  1. 定义了若干常用的Maven POM文件,导入一个POM文件关联组建一并导入
  2. 自动发现依赖组件,如:如果引用了标识Web项目的POM文件则项目自动以Web形式加载启动,SpringBoot自动处理Tomcat等配置项
  3. SpringBoot混淆了以往对SSMSSM架构的认识,符合服务发展的趋势提升服务内聚性降低服务间耦合性,自然对SpirngBoot而言使用Spirng SpringMVC等技术都是常态,SpringBoot更像是一个大的框架,整合了若干小的框架。
  4. SpringBoot提供了更好的配置文件管理方式YARN格式配置文件,更便捷的属性文件到JavaBean属性的绑定。

官方示例:

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

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


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值