SSM框架以及分布式整合配置文件详细说明——理解以及面试问题——超级详细

这里是分布式开发,所以web工程和service工程是分开的

一、WEB工程中的配置

1.首先是springmvc文件
配置内容大体有以下:
a.加载自己写的properties文件

<context:property-placeholder
		location="classpath:conf/resource.properties" />

b.导入包的依赖

context:component-scan
		base-package="com.xiaobai.test.controller" />
	<mvc:annotation-driven />

c.配置视图解析器

<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

d. 配置资源映射

<mvc:resources location="/css/" mapping="/css/**" />
	<mvc:resources location="/js/" mapping="/js/**" />

e.定义文件上传解析器

<!-- 定义文件上传解析器 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 设定默认编码 -->
		<property name="defaultEncoding" value="UTF-8"></property>
		<!-- 设定文件上传的最大值5MB,5*1024*1024 -->
		<property name="maxUploadSize" value="5242880"></property>
	</bean>

f.配置zookeeper注册中心和duboo服务发布

<!-- 引用服务端发布的服务 -->
	<!-- 在注册中心的应用的名称 -->
	<dubbo:application name="xiaobai-test-web" />
	<!-- 配置注册中心的相关信息 -->
	<dubbo:registry protocol="zookeeper"
		address="192.168.245.128:1999" />
	<dubbo:reference
		interface="com.xiaobai.service.ItemService" id="itemService" />
	<dubbo:reference timeout="8000" //配置超时时间
		interface="com.igeek.ebuy.search.service.SearchService"
		id="searchService" />

2.然后是log4j日志文件,格式都一样的。

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


log4j.rootLogger=info,stdout

3.之后是自己写的配置文件
这里说明一下:自己写的配置文件,在springmvc中配置后,可以用@Value在代码中导入

4.最后是web.xml

<!-- 加载spring容器的监听器 -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:spring/applicationContext*.xml</param-value>
</context-param>
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

二、Service工程中的配置

1.首先是db.properties文件,配置连接数据库的信息

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/xiaobai?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

2.然后是mybatis的SqlMapConfig文件,整合后几乎不需要配置,但是如果要使用分页插件,如pagehelper,需要在这里进行配置。

	<plugins>
	<!--配置分页插件-->
		<plugin interceptor="com.github.pagehelper.PageHelper">
			<!-- 设置数据库方言 -->
			<property name="dialect" value="mysql" />
		</plugin>
	</plugins>

3.然后是spring中的applicationContext-dao文件配置,配置连接数据库的配置文件,连接相关、mapper扫描、连接池的bean等。

  <!-- 数据库连接池 -->
	<!-- 加载配置文件 -->
	<context:property-placeholder location="classpath:conf/db.properties" />
	<!-- 数据库连接池 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>
	<!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 数据库连接池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 加载mybatis的全局配置文件 -->
		<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" />
	</bean>
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.igeek.ebuy.manager.mapper" />
	</bean>

4.然后是spring中的applicationContext-trans文件配置, 配置声明式事务。 事物管理器,事物的传播特性,以及AOP切面等

<!-- 事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 数据源 -->
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- 通知 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<!-- 传播行为 -->
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="create*" propagation="REQUIRED" />
			<tx:method name="delete*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="find*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="select*" propagation="SUPPORTS" read-only="true" />
			<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
		</tx:attributes>
	</tx:advice>
	<!-- 切面 -->
	<aop:config>
		<aop:advisor advice-ref="txAdvice"
			pointcut="execution(* com.xiaobai.service..*.*(..))" />
	</aop:config>

5.spring中的applicationContext-service文件配置,主要配置service的扫描表,zookeeper注册中心,发布dubbo服务等。

<!-- 配置service的扫描包 -->
<context:component-scan
	base-package="com.xiaobai.service" />


<!-- 发布dubbo服务 -->
<!-- 配置application名称  -->
<dubbo:application name="ebuy-cart" />
<!-- 配置注册中心的信息 -->
<dubbo:registry protocol="zookeeper"
	address="192.168.128.150:2181" />
<!-- 配置dubbo服务以及端口号  -->
<dubbo:protocol name="dubbo" port="20195" />
<!-- 申明需要暴露的服务的接口 -->
<!-- interface:提供的服务的接口
	ref:实际提供服务的实现类的对象在spring中的名称
 -->
<dubbo:service interface="com.igeek.ebuy.cart.service.CartService"
	ref="cartServiceImpl" />

6.如果你使用了redis,spring中的applicationContext-redis文件配置,主要对单机版以及集群版redis进行配置。

<!-- 单机版的 -->
<bean id="jedisPoolClient" class="com.xiaobai.jedis.JedisPoolClient">
	<property name="jedisPool" ref="jedisPool"/>
</bean>
<!-- 配置一个jedisPool -->
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
	<constructor-arg name="host" value="192.168.245.128"/>
	<constructor-arg name="port" value="6379"/>
</bean>

<!-- 集群版 -->
<!-- <bean id="jedisClusterClient" class="com.xiaobai.jedis.JedisClusterClient">
	<property name="cluster" ref="cluster"/>
</bean> -->
<!-- jedisCluster -->
<bean id="cluster" class="redis.clients.jedis.JedisCluster">
	<constructor-arg name="nodes">
		<set>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg name="host" value="192.168.245.128"/>
				<constructor-arg name="port" value="7001"/>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg name="host" value="192.168.245.128"/>
				<constructor-arg name="port" value="7002"/>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg name="host" value="192.168.245.128"/>
				<constructor-arg name="port" value="7003"/>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg name="host" value="192.168.245.128"/>
				<constructor-arg name="port" value="7004"/>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg name="host" value="192.168.245.128"/>
				<constructor-arg name="port" value="7005"/>
			</bean>
			<bean class="redis.clients.jedis.HostAndPort">
				<constructor-arg name="host" value="192.168.245.128"/>
				<constructor-arg name="port" value="7006"/>
			</bean>
		</set>
	</constructor-arg>
</bean>

7.如果你使用了solr搜索引擎(搜索应用服务器),spring中的applicationContext-solr文件配置,需要配置solr。

<!-- 单机版solr -->
	<bean id="solrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
		<constructor-arg name="baseURL" value="http://192.168.245.128:8080/solr/collection1"/>
	</bean>
	<!-- 集群版solr 
	<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
		<constructor-arg name="zkHost" value="192.168.245.128:2181,192.168.245.128:2182,192.168.245.128:2183"/>
		<property name="defaultCollection" value="collection2"/>
	</bean>
	-->

8.如果你使用了acctive-MQ消息队列,spring中的applicationContext-activeMQ文件配置,需要配置connectionfactory,而且在生产者和消费者两方,配置也不同,配置如下:

a.生产者(发送者)

<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
	<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<constructor-arg name="brokerURL" value="tcp://192.168.245.128:61616"/>
	</bean>
	
	<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
	<bean id="connectionFactory"
		class="org.springframework.jms.connection.SingleConnectionFactory">
		<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
		<property name="targetConnectionFactory" ref="targetConnectionFactory" />
	</bean>
	
	
		<!-- 配置生产者 -->
	<!-- Spring提供的JMS工具类,它可以进行消息发送、接收等 -->
	<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
		<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
		<property name="connectionFactory" ref="connectionFactory" />
	</bean>
	
	
	<!--这个是队列目的地,点对点的 -->
	<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
		<constructor-arg>
			<value>spring-queue</value>
		</constructor-arg>
	</bean>
	<!--这个是topic目的地,一对多的 -->
	<bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
		<constructor-arg index="0" value="spring-topic" />
	</bean>
	
	<!--添加需要的队列 -->
	<bean id="itemAdd-topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
		<constructor-arg index="0" value="itemAdd-topic" />
	</bean>

b.消费者(接受者)

<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
	<bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
		<constructor-arg name="brokerURL" value="tcp://192.168.128.150:61616"/>
	</bean>
	
	<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
	<bean id="connectionFactory"
		class="org.springframework.jms.connection.SingleConnectionFactory">
		<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
		<property name="targetConnectionFactory" ref="targetConnectionFactory" />
	</bean>
	
	
	<!--添加商品的队列 -->
	<bean id="itemAdd-topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
		<constructor-arg index="0" value="itemAdd-topic" />
	</bean>
	
	<!-- 配置监听器 -->
	<bean id="itemAddListener" class="com.igeek.ebuy.item.listeners.ItemAddListener"/>
	
	<!-- 配置消息监听容器 -->
	<bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
		<!-- 服务器连接对象 -->
		<property name="connectionFactory" ref="connectionFactory" />
		<!-- 消息队列对象 -->
		<property name="destination" ref="itemAdd-topicDestination" />
		<!-- 消息监听对象 -->
		<property name="messageListener" ref="itemAddListener" />
	</bean>

9.最后是web.xml

<!-- 加载spring容器的监听器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- 前端控制器 -->
	<servlet>
		<servlet-name>ebuy-manager</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/springmvc.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>ebuy-manager</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

	<!-- post请求的字符处理 -->

	<filter>
		<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

如有不足,请联系补充,看完如果对您有帮助,请给我一个赞!!!爱您!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值