最近,正在为公司搭建java部门的开发平台,记录下搭建的整个过程。
1. 环境介绍
1.1. JDK
jdk1.6.0_04
1.2. Web服务器
Tomcat6.0.29-windows-x86
1.3. 开发工具
Eclipse3.7
(Version:
Indigo Release Build id: 20110615-0604)
1.4. 使用的框架
后端:Mybatis(3.0.5) + Spring(3.0.5)MVC
前端:jQuery1.5.1
1.5. 数据库
MySQL(5.1)
2. 搭建过程
2.1. 项目结构
整个工程的编码是“utf-8”(包括里面所有的文件)。首先看一下整个项目的结构(里面涉及到公司名称的部分进行了处理):
接着,看看需要哪些jar包:
2.2. 配置文件
2.2.1 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 载入spring上下文 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<!--
载入springMVC配置
如果<servlet-name>的名称为testMVC,则对应的xml文件则是testMVC-servlet.xml
-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Spring监听 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<!-- Spring 刷新Introspector防止内存泄露 -->
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- Spring过滤中文字符集 -->
<filter>
<filter-name>SetCharacterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 要过滤的类型 -->
<filter-mapping>
<filter-name>SetCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.2.2 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
>
<!-- jdbc属性文件读入 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize" value="5"/>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="30"/>
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="10"/>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="10"/>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="5"/>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。
但由于预缓存的statements属于单个connection而不是整个连接池。所以设
置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection
均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements" value="0"/>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod" value="60"/>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts" value="30"/>
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据
源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设
为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
<property name="breakAfterAcquireFailure" value="true"/>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection
提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout" value="false"/>
</bean>
<!-- Mybatis's sqlSessionFactory config -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<bean name="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 启用事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="create*" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="copy*" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="update*" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="delete*" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="find*" read-only="true" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="list*" read-only="true" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="is*" read-only="true" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
<tx:method name="*" read-only="true" rollback-for="com.googosoft.framework.exception.CRUDException,Exception" />
</tx:attributes>
</tx:advice>
<!-- AOP代理设置 -->
<aop:config>
<aop:advisor pointcut="execution(* com.googosoft.framework.service.*.*(..))" advice-ref="txAdvice" />
</aop:config>
<!—- 自动扫描 XXXMapper.java -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.googosoft.framework.persistence" />
</bean>
<!-- 激活annotation功能 -->
<context:annotation-config />
<context:spring-configured/>
</beans>
其中,需要注意的2个地方是:
1. jdbc.properties文件的位置:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
这里指的是classpath的位置,如果还有文件夹,可以写成“XXX / jdbc.properties”
2. mybatis-config.xml文件的位置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
与jdbc需要注意的是一样的。
2.2.3 dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
>
<!-- 扫描指定package下所有带有如@controller,@services,@resource,并把所注释的注册为Spring Beans -->
<context:component-scan base-package="com.googosoft">
<context:include-filter type="regex" expression="com.googosoft.framework.service.*"/>
<context:include-filter type="regex" expression="com.googosoft.framework.web.*"/>
</context:component-scan>
<!-- 只能用于springMVC,用于配置springMVC的注解驱动 -->
<mvc:annotation-driven />
<!-- Spring mvc视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/view/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
2.2.4 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 运行时,参数信息 -->
<settings>
<!-- 使全局的映射器启用或禁用缓存。 -->
<setting name="cacheEnabled" value="true"/>
<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
<setting name="aggressiveLazyLoading" value="true"/>
<!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 -->
<setting name="multipleResultSetsEnabled" value="true"/>
<!-- 使用列标签代替列名。 -->
<setting name="useColumnLabel" value="true"/>
<!-- 允许JDBC支持生成的键。 -->
<setting name="useGeneratedKeys" value="false"/>
<!-- 指定MyBatis如何自动映射列到字段/属性。 -->
<setting name="autoMappingBehavior" value="PARTIAL"/>
<!-- 配置默认的执行器。 -->
<setting name="defaultExecutorType" value="SIMPLE"/>
</settings>
<!-- java类别名 -->
<typeAliases>
<typeAlias alias="User" type="com.googosoft.framework.domain.system.User" />
<typeAlias alias="Department" type="com.googosoft.framework.domain.system.Department" />
</typeAliases>
<!-- SQL映射语句 -->
<mappers>
<mapper resource="mapper/system/UserMapper.xml"/>
<mapper resource="mapper/system/DepartmentMapper.xml"/>
</mappers>
</configuration>
2.2.5 jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/gframe?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
2.2.6 log4j.properties
log4j.rootLogger=INFO,stdout,docout
### print Mybatis logging
log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=-----------------------------------------------------------------------------------%nLevel\:[%p]%nTime\:[%d]%nClass\:[%l]%nMessage\:[%m]%n
log4j.appender.docout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.docout.File=log/log.html
log4j.appender.docout.Append=true
log4j.appender.docout.DatePattern=yyyy-MM-dd'.html'
log4j.appender.docout.layout=org.apache.log4j.HTMLLayout
- 大小: 28.1 KB
- 大小: 11.2 KB
分享到:
相关推荐
网络编程网络编程网络编程网络编程
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
【资源说明】 基于树莓派智能小车(H5页面操作移动+实时显示摄像头内容+各类传感器)源码+详细文档+全部资料齐全 高分项目.zip基于树莓派智能小车(H5页面操作移动+实时显示摄像头内容+各类传感器)源码+详细文档+全部资料齐全 高分项目.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
2024-01-03-【办公自动化】Python执行Windows命令
【资源说明】 基于FPGA的FS-FBMC调制器的设计源码+全部资料齐全.zip基于FPGA的FS-FBMC调制器的设计源码+全部资料齐全.zip 【备注】 1、该项目是高分课程设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
黑马MySQL课程总结的学习笔记
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
张祖豪-软件工程师-职业规划.pdf
智慧工地整体解决方案qy.pptx
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
【资源说明】 基于FPGA设计的电梯控制电路系统源码+全部资料齐全.zip基于FPGA设计的电梯控制电路系统源码+全部资料齐全.zip 【备注】 1、该项目是高分课程设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过mac/window10/11/linux测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
课程内容: 将成功建立在问题基层上 不做第- 就做唯一 新切割营销 品牌4s战略-构建高效强势品牌 智慧底牌-成功背后的10大思维方式 切割营销将对手通向一侧的营销策略 营销绝对竞争力 品牌突破 切割营销 企业家修炼-第九届学习型中国世纪成功论坛 如何创造七种动力进行整合营销 营销品牌教材 林伟贤董进宇姜岚昕演讲-第八届学习型中国世纪成功论坛 内部报告:处理人生10种关系智慧 高效构建强势品牌 营销纲领(首部谋定未来的营销大典)1~4
酒店客房管理系统为酒店管理者和用户、清洁人员提供一个在线管理酒店客房的系统。在网站的设计中,一共分为了两个模块设计,一个是前台模块,一个是后台模块,前台主要用于提供查看客房信息,酒店资讯,留言反馈,个人中心,在线客服等一系列的功能,后台会根据等于角色的不同分配不同的权限,如果登录的是管理员角色的话,则有管理员个人信息管理,用户管理,客房管理,清洁管理,系统管理等,如果登录的是用户角色的话,则有用户个人信息管理,预约管理,入住管理,收藏管理等,如果登录的是清洁人员角色的话,,则有清洁人员个人信息管理,退房管理,清洁管理等。 整个后台系统的大致功能如图1所示,整个后台系统分为两个部分,一部分为用户端,一部分为管理端,用户端的功能主要是用户来进行房屋预约,房屋入住,房屋收藏,浏览反馈,在线咨询。管理端也分三类角色的管理,管理员角色,用户角色,清洁人员角色,对应的角色不同,相应的对应的管理端也不同。
IDC智能机房整体解决方案.ppt
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
电子元件 电子行业 行业分析 数据分析 数据报告 行业报告
当前文件需要和PasteSpider配套使用, 配套的还有PasteSpiderFile(文件同步管理器), 和PasteSpider的主端(一款类似K8S的容器管理工具)。 当前版本为大版本升级,需要和配套的其他端的版本使用,否则出现访问错误等! 把当前文件解压后,放于服务器上,或者是方入PasteSpider的解压缩里面的wwwroot文件夹下。 个人建议独立存放,因为PasteSpider是需要打包到docker的镜像里面的,存放于宿主服务器上便于修改! 当前版本修改内容主要如下: 1.数据的获取修改为get模式,后续会基于http的method做一些特定的日志记录,大致的思路是get只做简单的校验,post做强校验并记录日志等。 2.定时任务添加任务串的支持,比如需要发布一个项目中的几个服务,他们有执行顺序,只需要把上一个任务的ID作为当前任务的父级ID即可, 3.静态服务(一般是web静态端不需要构建的),支持暂存模式,配合定时发布使用! 更多PasteSpider资料访问 https://blog.csdn.net/apeart/category_12291787.html
Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。