Content Table

Gradle 修改 Maven 仓库

Gradle 的默认仓库在国内下载太慢了,可以切换到国内的 Maven 镜像仓库,如阿里的 Maven 库,又或者是换成自建的 Maven 私服。

一个简单的办法,修改项目的 build.gradle,将 jcenter() 或者 mavenCentral() 替换掉即可:

1
2
3
4
5
allprojects {
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
}
}

Spring O/X Mapping

Spring 3.0 的一个新特性是 O/X Mapper,下面简称 OXM,O 代表 Object,X 代表 XML,它的目的是实现 Java POJO 对象和 XML 文档之间的互相转换。

Spring O/X Mapper 定义统一的接口,实现由第三方框架提供。要使用 Spring 的 O/X 功能,您需要一个在 Java 对象和 XML 之间来回转换的库,Castor 就是这样一个流行的第三方工具,本文将使用这个工具,其他这样的工具包括 XMLBeans、Java Architecture for XML Binding (JAXB)、JiBX 和 XStream。

Spring Event

JMS 可用于在不同应用之间通讯,而应用系统内部对象之间的通讯可以使用 Spring Event 来实现(JMS 也能实现同样的效果)。

Spring Event 的关键对象为 事件事件发送者事件监听器:

  • 事件类需要继承 ApplicationEvent
  • 事件发送者需要实现接口 ApplicationEventPublisherAware,Spring 容器在创建事件发送者对象时因为发现它实现了接口 ApplicationEventPublisherAware,就会自动地注入 applicationEventPublisher,这个对象是真正的用于发送事件的对象
  • 事件监听器需要实现接口 ApplicationListener,在 Spring 容器里注册事件监听器(其实就是生成一个对象,Spring 会自动识别它是否为事件监听器)

JMS + ActiveMQ

JMS 的全称是 Java Message Service,即 Java 消息服务,ActiveMQ 实现了 JMS 的接口。它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息(生产者和消费者可以在同一个应用中,也可以不在同一个应用中)。应用到实际的业务需求中的话我们可以在特定的时候利用生产者生成一消息,并进行发送,对应的消费者在接收到对应的消息后去完成对应的业务逻辑。一个典型的应用例如用户注册后需要发送验证邮件,因为发送邮件是一个耗时任务,如果在注册的逻辑代码中发送邮件的话系统的响应就会很慢,可以在用户注册后立即返回,并把发送邮件的任务通过 JMS 发送到消息队列中,然后另一个专门负责发送邮件的服务从 MQ 里获取发送邮件的消息发送邮件。

如果是同一个程序里通讯的话,可以使用 Spring Event。

消息有两种类型:

  • 点对点: 一个消息只能被一个消费者接收处理
  • 发布/订阅模式: 一个消息能同时被多个消费者接收处理

消息生产者使用步骤:

  • 配置 ConnectionFactory
  • 配置 Destination,也就是队列
  • 创建消息生产者对象
  • 发送消息

消息消费者使用步骤:

  • 配置 ConnectionFactory
  • 创建消息消费者对象
  • 配置消息监听容器
  • 有消息到达时消息的消费者的 onMessage() 方法会被自动调用

程序运行前当然要先启动 ActiveMQ

Markdown 入门

掌握以下几个标签就能使用 Markdown 随意的写出漂亮的文档了,而且可以导出为 HTML, PDF 等給其他人看:

  • 标题: #
  • 加粗: **
  • 斜体: *
  • 代码: ```
  • 列表: 1. *
  • 链接: [](URL) [文字](URL)
  • 图片: ![]()
  • 引用: >
  • 换行: 2 个空格 或者 <br>
  • 表格:

JNDI 数据源

本文基于 Spring 的 JdbcTemplate 来介绍使用 JNDI 数据源。

JNDI 有两种配置方式:

  • 全局 JNDI 配置 - 在 <tomcat>/conf/server.xml 里配置,所有项目都能使用
  • 局部 JNDI 配置 - 有两种方式,只有配置此 JNDI 的项目自己能使用
    • META-INF/context.xml 里配置
    • <tomcat>/conf/Catalina/localhost/<projectRelated>.xml 里配置

Annotation - 注解

注解的目的是给类,属性,参数等提供一些元数据信息,例如标记类的用途(都是静态的数据,写程序的时候写死在代码里)。

注解有 4 个类型,最常用的是 @Target@Retention:

  • @Target - Annotation 修饰的对象范围,即被修饰的对象可以用在什么地方,常用的有类、接口、属性和参数
    • ElementType.TYPE - 类、接口
    • ElementType.FIELD - 属性
    • ElementType.PARAMETER - 参数
  • @Retention - 比较常用的是 RetentionPolicy.RUNTIME,运行时通过反射取得注解的元数据
  • @Documented
  • @Inherited

Qt 应用程序的图标

设置应用程序的图标,只需要修改 .pro 文件:

  • Mac 使用 icns 图标: ICON = AppIcon.icns
  • Windows 使用 ico 图标: RC_ICONS = AppIcon.ico

图标和 .pro 文件在同一个目录即可

qmake 时复制文件

有时在编译前需要准备一些文件,例如修改了 QtCreator 的编译输出目录: Build & Run > Default build directory,使用 Promote 后需要在编译前把相应 Widget 的头文件复制到 .o 文件所在的目录,这时就可以在 .pro 文件中使用复制文件的命令(其实就是执行系统命令),让 qmake 执行这些命令来复制文件,而不是手动的复制需要的文件。

可以使用 qmake 时能执行系统的命令的特性来做很多事情,不只是复制文件。