博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
企业级Spring最佳实践 - 项目配置
阅读量:5776 次
发布时间:2019-06-18

本文共 11100 字,大约阅读时间需要 37 分钟。

hot3.png

  • 项目目录
  • 项目依赖
  • Smart Logging
  • Jetty 和 Tomcat
  • Spring 配置文件
  • 完成 Maven 配置
  • 常用的 Maven 命令

项目目录

Production

src/main/java - JAVA源码包目录和类
src/main/resources - JAVA资源目录(例如:*.properties 文件,spring 配置文件等)
Test
src/test/java - 测试代码包和类
src/test/resources - 测试资源目录(例如:*.properties 文件,spring 配置文件等)

项目目录结构例子:

── pom.xml

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── gordondickens
    │   │           └── sample
    │   │               ├── domain
    │   │               │   └── MyDomain.java
    │   │               ├── repository
    │   │               │   └── MyDomainRepository.java
    │   │               ├── service
    │   │               │   ├── MyDomainService.java
    │   │               │   └── internal
    │   │               │       └── MyDomainServiceImpl.java
    │   │               └── web
    │   │                   └── MyDomainController.java
    │   ├── resources
    │   │   ├── META-INF
    │   │   │   └── spring
    │   │   │       ├── applicationContext.xml
    │   │   │       └── database.properties
    │   │   ├── logback-access.xml
    │   │   └── logback.xml
    │   └── webapp
    │       ├── WEB-INF
    │       │   ├── classes
    │       │   ├── i18n
    │       │   ├── layouts
    │       │   ├── spring
    │       │   │   └── webmvc-config.xml
    │       │   ├── views
    │       │   │   ├── myDomain
    │       │   │   │   ├── create.jsp
    │       │   │   │   ├── list.jsp
    │       │   │   │   ├── show.jsp
    │       │   │   │   └── update.jsp
    │       │   │   ├── dataAccessFailure.jsp
    │       │   │   ├── index.jsp
    │       │   │   ├── resourceNotFound.jsp
    │       │   │   ├── uncaughtException.jsp
    │       │   │   └── views.xml
    │       │   └── web.xml
    │       ├── images
    │       └── styles
    ├── site
    │   ├── apt
    │   ├── fml
    │   ├── site.xml
    │   └── xdoc
    └── test
        ├── java
        │   └── com
        │       └── gordondickens
        │           └── sample
        │               └── service
        │                   └── MyDomainServiceTests.java
        └── resources
            ├── com
            │   └── gordondickens
            │       └── sample
            │           └── service
            │               └── MyDomainServiceTests-context.xml
            └── logback-test.xml

项目依赖

我是 maven 的超级粉丝,它提供了一个一致的构建架构,并且拥有很多插件。

Gradle 是一个新兴的基于 Groovy 的构建工具,它支持maven架构。如果你仍旧在使用Ant,
我强烈建议你迁移到Maven或者Gradle上来。企业构建工具所面临的挑战之一是管理传递性
依赖,这里有一些建议可以面对这些挑战。

依赖版本

不要使用低于 <properties/> 节点中指定的版本号,这样更容易升级和测试新的版本;
要包括所有插件的版本号!不要依赖于 Maven 内置的父POM中的插件版本。
管理依赖
使用 Maven的 <DependencyManagement /> 节点控制显式和隐式的版本!将版本号在这里指定,
将解决传递性依赖
Enforcer Plugin (强制执行插件)
禁止直接(或间接)包含不兼容的(或旧的)jar。例如,SLF4J 1.5,1.6和SLF4J 1.7 是不能
在一起运行的,因此我们需要在项目构建中禁止带有混合依赖的版本。Spring被很多开源项目
所使用,有的会引用老的版本,因此,我们要控制在我们构建中包含的spring jar版本。
强制执行例子:
· 确保使用 JAVA 1.6
· 确保 MAVEN 的版本是 2.2.1 - 3.0.x
· 确保 spring 的 jar 是 3.1 或更新版本
· 禁止旧的 javassist, 应该是 org.javassist
· 确保没有 commons-logging 或者 commons-logging-api 依赖
· 确保没有 log4j 依赖
· 确保没有 slf4j 1.5 或者 1.6 依赖
· 禁止旧的 hsqldb,应该使用 org.hsqldb
· 禁止旧的 aspectj,应该使用 org.aspectj

...
1.6
...
1.2
[2.2.1,3.1.0)
...
org.apache.maven.plugins
maven-enforcer-plugin
${maven.enforcer.plugin}
enforce-banned-dependencies
enforce
true
javassist:javassist
commons-logging
aspectj:aspectj*
hsqldb:hsqldb
log4j:log4j
org.slf4j:1.5*
org.springframework:2.*
org.springframework:3.0.*
${maven.version.range}
${java.version}
true

Smart Logging

· 不要使用 System.out

· 不要使用 System.err
· 总是使用 SLF4j
· 总是使用 Logback
· 禁止 Apache commons logging (JCL) aka Jakarta Commons Logging
· 禁止使用 Java util logging (JUL)
在类中应该使用 SFL4J(不是 log4j、jcl、jul 和 logback):

import org.slf4j.Logger;import org.slf4j.LoggerFactory;...public class MyClass {  private static final Logger logger =    LoggerFactory.getLogger(MyClass.class);...}
在下面的例子中,SLF4J提供 jar包(jcl-over-slf4j和jul-to-slf4j)用来路由 JCL 和 JUL。
Spring 使用 JCL,因此我们必须使用 jcl-over-slf4j 来处理 spring 的日志内容。
...
1.0.10
...
1.7.4
...
...
...
org.slf4j
jcl-over-slf4j
org.slf4j
jul-to-slf4j
ch.qos.logback
logback-classic
...
...
...
org.slf4j
jcl-over-slf4j
${slf4j.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
jul-to-slf4j
${slf4j.version}
ch.qos.logback
logback-classic
${logback.version}
ch.qos.logback
logback-core
${logback.version}
ch.qos.logback
logback-access
${logback.version}
...
日志配置文件
src/main/resources/logback.xml
true
%.-1level|%-40.40logger{0}|%msg%n
src/main/resources/logback-test.xml
同样的配置,只不过,这个配置用于测试环境
src/main/resources/logback-access.xml
配置服务器访问日志,当在 web.xml 中使用 Logback TeeFilter时,
HttpRequest 和 HttpResponses 消息能被显示或被记录。用于 创建 RESTful 测试。
NOTE:在日志配置中使用 ${user.dir},日志文件将被创建在项目根目录下。
我们将根据这个来配置不同的生产环境。
countingFilter
${user.dir}/logs/app-access.log
${user.dir}/logs/app-access.%d{yyyy-MM-dd}.log.zip
combined
%n%fullRequest%n%fullResponse%n
${user.dir}/logs/app-req-resp.log
${user.dir}/logs/app-req-resp.%d{yyyy-MM-dd}.log.zip
%n%fullRequest%n%fullResponse%n

Jetty 和 Tomcat

开发人员能根据MAVEN插件配置运行 Jetty 或 Tomcat 用于测试。

下面的插件配置了 JMX,SLF4j,Logback和 Logback Access。
运行 Jetty
$ mvn clean install jetty:run
运行 Tomcat 7
$ mvn clean install tomcat7:run
NOTE:不要使用 tomcat:run,这是老的 tomcat 插件。

...
8.1.10.v20130312
...
2.1
...
...
...
org.apache.tomcat.maven
tomcat7-maven-plugin
${maven.tomcat.plugin}
true
8050
false
false
org.apache.juli.ClassLoaderLogManager
JNDI
org.slf4j
jcl-over-slf4j
${slf4j.version}
runtime
org.slf4j
slf4j-api
${slf4j.version}
runtime
org.slf4j
jul-to-slf4j
${slf4j.version}
runtime
ch.qos.logback
logback-classic
${logback.version}
runtime
ch.qos.logback
logback-access
${logback.version}
runtime
org.mortbay.jetty
jetty-maven-plugin
${maven.jetty.plugin}
/${project.name}
9966
shutterdown
./src/main/resources/logback-access.xml
logback.configurationFile
./src/main/resources/logback.xml
com.sun.management.jmxremote
true
com.sun.management.jmxremote.port
8050
com.sun.management.jmxremote.ssl
false
com.sun.management.jmxremote.authenticate
false
org.slf4j
jcl-over-slf4j
${slf4j.version}
runtime
org.slf4j
slf4j-api
${slf4j.version}
runtime
org.slf4j
jul-to-slf4j
${slf4j.version}
runtime
ch.qos.logback
logback-classic
${logback.version}
runtime
ch.qos.logback
logback-access
${logback.version}
runtime
...
Logback 助手配置(web.xml)
能查看 Logback 状态
...  
ViewStatusMessages
ch.qos.logback.classic.ViewStatusMessagesServlet
ViewStatusMessages
/logbackStatus
...
使用 Logback Tee Filter 过滤记录 HttpRequest 和 HttpResponse 的数据
...  
TeeFilter
ch.qos.logback.access.servlet.TeeFilter
TeeFilter
/*
...

Spring 配置文件

使用一致的文件命名规则,所有配置文件拥有相同的前缀,例如:applicationConfig*.xml。

(译注:我一直使用 app-*.xml)
例如:app-bootstrap.xml,app-database.xml,app-cache.xml,app-security.xml ……
在后面的博客中,我将具体说说企业级spring配置最佳实践。
配置目录:
src/main/resources/META-INF/spring - Spring XML 配置目录
src/main/webapp/WEB-INF/spring - Spring MVC 配置目录

完成 Maven 配置

 

MAVEN 最佳实践配置文件的特点:

· 所有的版本号在 properties 节点中配置;
· DependencyManagement 节点控制依赖传递;
· 所有的带版本号的插件在 Plugin Management 节点中定义;
· 强制执行插件会停止构建不兼容的依赖;
· 使用 site 插件配置带有公用报告的插件;
· Eclipse 插件使用新的 Eclipse 的 Maven插件,旧的是 Sonatype;
· Idea(IntelliJ)插件已经过时,不包括在内;
· 版本号插件检查依赖包和插件的更新

常用的 Maven 命令

显示更新依赖

$ mvn versions:display-dependency-updates
显示插件更新
$ mvn versions:display-plugin-updates
显示依赖树
$ mvn dependency:tree -Ddetail
显示依赖列表
$ mvn dependency:list
显示有效的POM
$ mvn help:effective-pom
显示项目设置
$ mvn help:effective-settings
显示系统和环境变量
$ mvn help:system
显示构建的类路径(Class Path)
$ mvn dependency:build-classpath

原文:

作者:Gordon

转载于:https://my.oschina.net/fcrpg2008/blog/163015

你可能感兴趣的文章
公网API安全--OAuth认证
查看>>
【转】java 定时执行任务练习
查看>>
Guava-Monitor-Future并发特性
查看>>
lae界面开发工具入门之介绍九--<lua脚本组件篇>
查看>>
noejs内存泄露
查看>>
使用IntelliJ IDEA 14和Maven创建java web项目
查看>>
【九度OJ1512】|【剑指offer7】用两个栈实现一个队列
查看>>
虚拟机下centos复制导致network连接失败问题解决方法
查看>>
Java中Math类常用函数总结
查看>>
libsvm代码阅读:关于Kernel类分析
查看>>
R语言求定积分
查看>>
Android-好的学习网站或者博客
查看>>
web的一些细节
查看>>
简单的servlet容器
查看>>
弄个收藏夹,用搜集文章,省的每次都去发一篇文。
查看>>
HTTP协议的头信息详解
查看>>
支付宝支付
查看>>
邮件服务器负载均衡大型企业部署方案
查看>>
Zabbix之监控交换机 (OID)
查看>>
3G模块拨号上网设置APN,拨号号码,帐号和密码
查看>>