学习总结(2016年10月3日 )

1. Linux 中的线程

原文:http://blog.csdn.net/ctthuangcheng/article/details/8914712java

长久以来,Linux 并无线程的概念。Linux 中的线程是使用子进程模拟的。在 2.6 之前的版本,Linux 的线程是靠 pthread 库实现的,可是其只实现了 POSIX 中对线程定义的几条要求中的一条,相去甚远。spring

在 2.6 以后,task_struct 结构中增长了一个 tgid。这个数据结构上的变化使得 Linux 中的线程完整实现了 POSIX 的要求。api

2. DDD、CQRS 与 EventSourcing

原文:http://www.uml.org.cn/zjjs/201609221.asp数据结构

DDD 中的聚合和聚合根

聚合指的是一组内聚的实体和值对象。 聚合根指的就是这一组聚合的根对象。聚合之间的交互都必须经过聚合根进行,不能绕过聚合根直接和其下面的实体进行交互。app

DDD 聚合

聚合与一致性

聚合内部要保证强一致性,聚合与聚合之间要保证最终一致性。cors

EventSourcing 是否适合互联网

大量的 log 数据和数据预热等问题存在,我不太认为 EventSourcing 适合互联网应用。固然这也只是我现阶段的见解。less

3. Spring 4 新特性

用 Groovy DSL 配置 Spring Bean

原文:http://jinnianshilongnian.iteye.com/blog/1991830dom

Spring 4.0 引入了 Groovy DSL,但目前看还不是很完善,不推荐大规模使用。ide

4. Slf4J

Logger.error(String message, Object... args) args 中若是最后一个是 Throwable,且没有匹配到 {} 的话,便会打印出异常栈flex

5. CORS

原文:https://spring.io/blog/2015/06/08/cors-support-in-spring-framework 简单的 demo:https://spring.io/guides/gs/rest-service-cors/

Cross-origin resource sharing (CORS) is a W3C specification implemented by most browsers that allows you to specify in a flexible way what kind of cross domain requests are authorized, instead of using some less secured and less powerful hacks like IFrame or JSONP.

Spring 4.2 中增长了完善的 CORS 支持,既能够在 Controller 类级别和方法级别上进行配置,也能够进行全局配置。

类级别配置:

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {

	@CrossOrigin(origins = "http://domain2.com")
	@RequestMapping("/{id}")
	public Account retrieve(@PathVariable Long id) {
		// ...
	}

	@RequestMapping(method = RequestMethod.DELETE, value = "/{id}")
	public void remove(@PathVariable Long id) {
		// ...
	}
}

全局配置:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/api/**")
			.allowedOrigins("http://domain2.com")
			.allowedMethods("PUT", "DELETE")
			.allowedHeaders("header1", "header2", "header3")
			.exposedHeaders("header1", "header2")
			.allowCredentials(false).maxAge(3600);
	}
}

若是使用 Spring Boot,则能够使用下面的配置:

@Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**");
            }
        };
    }
}

当使用 Spring Security 时,为了使 Spring Security 也支持 CORS,则须要基于 Filter 支持 CORS:

@Configuration
public class MyConfiguration {

	@Bean
	public FilterRegistrationBean corsFilter() {
		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		CorsConfiguration config = new CorsConfiguration();
		config.setAllowCredentials(true);
		config.addAllowedOrigin("http://domain1.com");
		config.addAllowedHeader("*");
		config.addAllowedMethod("*");
		source.registerCorsConfiguration("/**", config);
		FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
		bean.setOrder(0);
		return bean;
	}
}

说实话上面这些配置仍是有些复杂

相关文章
相关标签/搜索