问题现象
Date字段在不同机器上序列化、反序列化,时间值出现半个小时的偏差。
然而使用date
命令查看系统时间,两台机器上的时间是一致的,时区都是CST(中间标准时间)。
实现RabbitMQ的消费者有两种模式,推模式(Push)和拉模式(Pull)。
实现推模式推荐的方式是继承DefaultConsumer
基类,也可以使用Spring AMQP的SimpleMessageListenerContainer
。
推模式是最常用的,但是有些情况下推模式并不适用的,比如说:
使用Maven过程中,曾经出现过本地仓库中已经存在某jar包,但是Maven仍然从远程仓库下载jar包的现象,并且可能会报出类似以下的错误:
1 | [exec] [ERROR] The project com.acme:test:0.0.1-SNAPSHOT (/home/acme/pom.xml) has 1 error |
在生产实践中,配置覆盖是解决不同环境不同配置的常用方法。比如用生产服务器上的配置文件覆盖包内的文件,或者使用中心化的配置服务来覆盖默认的业务配置。
相比于profile机制(比如maven的profile、spring boot的profile-specific properties),即不同环境使用不同的配置文件,覆盖的方式更有优势。程序员在开发时不需要关心生产环境数据库的地址、账号等信息,一次构建即可在不同环境中运行,而profile机制需要将生产环境的配置写到项目资源文件中,而且要为不同环境使用不同的构建参数或者运行参数。
Spring提供了灵活的配置扩展能力,有多种方式将自定义的属性源,将集成进来,可以轻松地实现配置覆盖。
在Spring Boot中,starter是为快速应用开发提供“一站式服务”的依赖(Dependency)。starter使得开发人员在开始编写新的模块时不需要拷贝样板式的配置文件、编写样板式的代码,只需要提供最简单的配置(比如host & port)即可开始编程。
在Markdown的表格中输入管道符|
,或者在hexo的title中输入冒号:
,都会导致解析错误。
可以在Markdown中用Html编码输入各种字符,比如使用|
输入|
,使用:
输入:
。
编码转换可以使用Unicode编码转换工具。