12 定时任务 profile MongoDB.txt
UP 返回
day20
E:\2019年4月黑马程序员教程\05-黑马JavaEE49期全套\17品优购电商系统开发\阶段一\20品优购系统业务分析
1. 创建模块pinyougou-task-service,引入spring相关依赖 dao 和common工程,tomcat7端口为9108 ,添加web.xml ,添加配置文件applicationContext-task.xml,引入task标签
1.1 cron表达式
Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
(1)Seconds Minutes Hours DayofMonth Month DayofWeek Year
(2)Seconds Minutes Hours DayofMonth Month DayofWeek
每一个域可出现的字符如下:
Seconds:可出现", - * /"四个字符,有效范围为0-59的整数
Minutes:可出现", - * /"四个字符,有效范围为0-59的整数
Hours:可出现", - * /"四个字符,有效范围为0-23的整数
DayofMonth:可出现", - * / ? L W C"八个字符,有效范围为1-31的整数
Month:可出现", - * /"四个字符,有效范围为1-12的整数或JAN-DEc
DayofWeek:可出现", - * / ? L C #"四个字符,有效范围为1-7的整数或SUN-SAT两个范围。1表示星期天,2表示星期一, 依次类推
Year:可出现", - * /"四个字符,有效范围为1970-2099年
每一个域都使用数字,但还可以出现如下特殊字符,它们的含义是:
(1)*:表示匹配该域的任意值,假如在Minutes域使用*, 即表示每分钟都会触发事件。
(2)?:只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和 DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
(3)-:表示范围,例如在Minutes域使用5-20,表示从5分到20分钟每分钟触发一次
(4)/:表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次.
(5),:表示列出枚举值值。例如:在Minutes域使用5,20,则意味着在5和20分每分钟触发一次。
(6)L:表示最后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。
(7)W: 表示有效工作日(周一到周五),只能出现在DayofMonth域,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一 到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份
(8)LW:这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。
(9)#:用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。
示例:
!!@@D:\MyJAR_Project\WordsCollection\refer\202207101.png_543_728_1@@!!
在该模块中添加两个定时任务,刷新和移除秒杀商品
2. profile 方便在pom中切换不同环境下的配置。参见page-web模块的pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.pinyougou</groupId>
<artifactId>pinyougou-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>pinyougou-pag-web</artifactId>
<packaging>war</packaging>
<properties>
<port>9105</port>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<port>9105</port>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<port>9205</port>
</properties>
</profile>
</profiles>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<!-- 指定端口 -->
<port>${port}</port>
<!-- 请求路径 -->
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
当启动时使用命令 tomcat7:run -P pro就会在9205端口启动; tomcat7:run -P dev 则为9105;直接使用tomcat7:run则是9105,因为前面已经配了一个默认值
2.1 profile切换数据库配置文件
实例模块pinyougou-dao。资源目录下创建filters,在里面加上两种环境的配置:db_dev.properties db_pro.properties;修改数据库配置文件db.properties,使里面的值都是参数取值(这些参数值和db_dev.properties db_pro.properties两文件保持一致,这两文件中才是真正的值):
jdbc.driver=${env.jdbc.driver}
jdbc.url=${env.jdbc.url}
jdbc.username=${env.jdbc.username}
jdbc.password=${env.jdbc.password}
在pom中添加参数:
<properties>
<env>dev</env>
</properties>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
</profile>
<profile>
<id>pro</id>
<properties>
<env>pro</env>
</properties>
</profile>
</profiles>
其中上面的properties作为默认参数,下面的即为不同配置的切换。继续在pom中添加build结点:
<build>
<filters>
<filter>src/main/resources/filters/db_${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
这里利用filter实现对资源文件(resouces) 过滤 :filter和resources总是搭配使用,后者通过filtering=true规定需要过滤的文件夹,前者为过滤规则。
这样根据过滤规则,可以动态过滤出要使用的环境文件db_${env}.properties(${env}即通过上面的profile指定),同时将过滤出的文件中的参数值映射到db.properties配置中
实际打包时给出环境,即可打出对应的包:package -P pro install也是同理,使用不同的的环境install后,启动其他服务,可以发现对应连接的数据库也是不同的
2.2 切换注册中心
2.2.1 dubbox配置集中
因为很多服务都会引入common模块,所以我们可以在common中配置一些共性的参数,添加spring配置文件applicationContext-dubbox.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- <dubbo:registry address="zookeeper://192.168.25.130:2181"/> --><!-- 跟下面这种配置是等效的 -->
<!-- <dubbo:registry protocol="zookeeper" address="192.168.25.130:2181"/> --><!-- 跟下面这种配置是等效的 protocol表示的是协议-->
<context:property-placeholder location="classpath*:properties/*.properties" /> <!-- 从redis配置applicationContext-redis.xml中移过来的,这种只要一个配置文件配了都是可以共用的 -->
<dubbo:registry protocol="zookeeper" address="${address}"/> <!-- 跟其他dubbox配置一样,抽出这句话,其他dubbox就可以不用配了 -->
</beans>
在配置文件夹properties下创建dubbox.properties :
address=192.168.25.135:2181
删除其他服务中关于注册中心的配置(即上面那句话),启动可以发现让然可以读到这个配置地址
2.2.2 配置进入profile
参2.1的方式,创建filter文件夹,创建两种环境的配置dubbox_dev.properties dubbox_pro.properties,对应地址参数为env.address,,值为不同环境具体的地址,同时把dubbox.properties中的地址改为参数值:
address=${env.address}
修改pom文件,上面的properties的配置相同,下面也添加build属性
<build>
<filters>
<filter>src/main/resources/filters/dubbox_${env}.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
通过package -P可以观察地址是否改变
3. MongoDB
MongoDB 是一个跨平台的面向文档的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似JSON 的 BSON 格式,因此可以存储比较复杂的数据类型(视频音频图片等都可以存)。
MongoDB 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它是一个面向集合的,模式自由的文档型数据库
适合mongodb的数据:频繁写入(写入速度非常快,本身不支持事务),价值不高的数据(评论 收藏 评价 足迹 日志等等)
MongoDB 的逻辑结构是一种层次结构。主要由:
文档(document)、集合(collection)、数据库(database)这三部分组成的。逻辑结构是面向用户的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。
(1)MongoDB 的文档(document),相当于关系数据库中的一行记录。
(2)多个文档组成一个集合(collection),相当于关系数据库的表。
(3)多个集合(collection),逻辑上组织在一起,就是数据库(database)。
(4)一个 MongoDB 实例支持多个数据库(database)。
文档(document)、集合(collection)、数据库(database)的层次结构类比于MYSQL如下:
!!@@D:\MyJAR_Project\WordsCollection\refer\202207102.png_598_143_1@@!!
学习连接:E:\2019年4月黑马程序员教程\05-黑马JavaEE49期全套\17品优购电商系统开发\资源\扩展资料\mongoDB\mongoDB_课程讲义_1.0.docx
DOWN 返回