论坛首页 入门技术论坛

quartz在spring中调度任务并写入数据库出现异常,求解

浏览 9038 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-24  
xml 代码
  1. 利用spring+quartz进行调度并将quartz信息放置进数据库,出现如下错误:   
  2.   
  3. java 代码   
  4. 2007-10-23 16:23:52,937 ERROR (ContextLoader.java:205) - Context initialization       
  5. failed       
  6. org.springframework.beans.factory.BeanCreationException: Error creating bean wit       
  7. h name 'schedulerFactory' defined in ServletContext resource [/WEB-INF/quartz.xm       
  8. l]: Invocation of init method failed; nested exception is org.quartz.JobPersiste       
  9. nceException: Couldn't store trigger: org.apache.commons.collections.set.ListOrd       
  10. eredSet [See nested exception: java.io.NotSerializableException: org.apache.comm       
  11. ons.collections.set.ListOrderedSet]       
  12. Caused by:       
  13. org.quartz.JobPersistenceException: Couldn't store trigger: org.apache.commons.c       
  14. ollections.set.ListOrderedSet [See nested exception: java.io.NotSerializableExce       
  15. ption: org.apache.commons.collections.set.ListOrderedSet]       
  16.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSup       
  17. port.java:1182)       
  18.         at org.quartz.impl.jdbcjobstore.JobStoreSupport$5.execute(JobStoreSuppor       
  19. t.java:1088)       
  20.         at org.quartz.impl.jdbcjobstore.JobStoreSupport$39.execute(JobStoreSuppo       
  21. rt.java:3590)       
  22.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLoc       
  23. k(JobStoreSupport.java:3662)       
  24.         at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java       
  25. :93)       
  26.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInLock(JobStoreSu       
  27. pport.java:3586)       
  28.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSup       
  29. port.java:1084)       
  30.         at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:750)       
  31.       
  32.         at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:266)       
  33.         at org.springframework.scheduling.quartz.SchedulerFactoryBean.addTrigger       
  34. ToScheduler(SchedulerFactoryBean.java:846)       
  35.         at org.springframework.scheduling.quartz.SchedulerFactoryBean.registerJo       
  36. bsAndTriggers(SchedulerFactoryBean.java:776)       
  37.         at org.springframework.scheduling.quartz.SchedulerFactoryBean.afterPrope       
  38. rtiesSet(SchedulerFactoryBean.java:599)       
  39.         at org.springframework.beans.factory.support.AbstractAutowireCapableBean       
  40. Factory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1118)       
  41.         at org.springframework.beans.factory.support.AbstractAutowireCapableBean       
  42. Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1085)       
  43.         at org.springframework.beans.factory.support.AbstractAutowireCapableBean       
  44. Factory.createBean(AbstractAutowireCapableBeanFactory.java:429)       
  45.         at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb       
  46. ject(AbstractBeanFactory.java:250)       
  47.         at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr       
  48. y.getSingleton(DefaultSingletonBeanRegistry.java:141)       
  49.         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean       
  50. (AbstractBeanFactory.java:247)       
  51.         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean       
  52. (AbstractBeanFactory.java:161)       
  53.         at org.springframework.beans.factory.support.DefaultListableBeanFactory.       
  54. preInstantiateSingletons(DefaultListableBeanFactory.java:270)       
  55.         at org.springframework.context.support.AbstractApplicationContext.refres       
  56. h(AbstractApplicationContext.java:346)       
  57.         at org.springframework.web.context.support.AbstractRefreshableWebApplica       
  58. tionContext.refresh(AbstractRefreshableWebApplicationContext.java:156)       
  59.         at org.springframework.web.context.ContextLoader.createWebApplicationCon       
  60. text(ContextLoader.java:246)       
  61.         at org.springframework.web.context.ContextLoader.initWebApplicationConte       
  62. xt(ContextLoader.java:184)       
  63.         at org.springframework.web.context.ContextLoaderListener.contextInitiali       
  64. zed(ContextLoaderListener.java:49)       
  65.         at org.apache.catalina.core.StandardContext.listenerStart(StandardContex       
  66. t.java:3764)       
  67.         at org.apache.catalina.core.StandardContext.start(StandardContext.java:4      
  68. 216)       
  69.         at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase       
  70. .java:760)       
  71.         at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:74      
  72. 0)       
  73.         at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)       
  74.       
  75.         at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav       
  76. a:920)       
  77.         at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j       
  78. ava:883)       
  79.         at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492      
  80. )       
  81.         at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)       
  82.         at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java       
  83. :311)       
  84.         at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl       
  85. eSupport.java:120)       
  86.         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)       
  87.       
  88.         at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)       
  89.         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)       
  90.       
  91.         at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443      
  92. )       
  93.         at org.apache.catalina.core.StandardService.start(StandardService.java:4      
  94. 48)       
  95.         at org.apache.catalina.core.StandardServer.start(StandardServer.java:700      
  96. )       
  97.         at org.apache.catalina.startup.Catalina.start(Catalina.java:552)       
  98.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       
  99.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.       
  100. java:39)       
  101.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces       
  102. sorImpl.java:25)       
  103.         at java.lang.reflect.Method.invoke(Method.java:585)       
  104.         at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)       
  105.         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)       
  106. Caused by: java.io.NotSerializableException: org.apache.commons.collections.set.       
  107. ListOrderedSet       
  108.         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075)       
  109.       
  110.         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java       
  111. :1369)       
  112.         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13      
  113. 41)       
  114.         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav       
  115. a:1284)       
  116.         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)       
  117.       
  118.         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java       
  119. :1369)       
  120.         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13      
  121. 41)       
  122.         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav       
  123. a:1284)       
  124.         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)       
  125.       
  126.         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)       
  127.         at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.insertBlobTrigger(StdJDB       
  128. CDelegate.java:1198)       
  129.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSup       
  130. port.java:1178)       
  131.         ... 48 more       
  132. 2007-10-23 16:23:53,000 ERROR (StandardContext.java:3768) - Exception sending co       
  133. ntext initialized event to listener instance of class org.springframework.web.co       
  134. ntext.ContextLoaderListener       
  135. org.springframework.beans.factory.BeanCreationException: Error creating bean wit       
  136. h name 'schedulerFactory' defined in ServletContext resource [/WEB-INF/quartz.xm       
  137. l]: Invocation of init method failed; nested exception is org.quartz.JobPersiste       
  138. nceException: Couldn't store trigger: org.apache.commons.collections.set.ListOrd       
  139. eredSet [See nested exception: java.io.NotSerializableException: org.apache.comm       
  140. ons.collections.set.ListOrderedSet]       
  141. Caused by:       
  142. org.quartz.JobPersistenceException: Couldn't store trigger: org.apache.commons.c       
  143. ollections.set.ListOrderedSet [See nested exception: java.io.NotSerializableExce       
  144. ption: org.apache.commons.collections.set.ListOrderedSet]       
  145.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSup       
  146. port.java:1182)       
  147.         at org.quartz.impl.jdbcjobstore.JobStoreSupport$5.execute(JobStoreSuppor       
  148. t.java:1088)       
  149.         at org.quartz.impl.jdbcjobstore.JobStoreSupport$39.execute(JobStoreSuppo       
  150. rt.java:3590)       
  151.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLoc       
  152. k(JobStoreSupport.java:3662)       
  153.         at org.quartz.impl.jdbcjobstore.JobStoreTX.executeInLock(JobStoreTX.java       
  154. :93)       
  155.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInLock(JobStoreSu       
  156. pport.java:3586)       
  157.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSup       
  158. port.java:1084)       
  159.         at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:750)       
  160.       
  161.         at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:266)       
  162.         at org.springframework.scheduling.quartz.SchedulerFactoryBean.addTrigger       
  163. ToScheduler(SchedulerFactoryBean.java:846)       
  164.         at org.springframework.scheduling.quartz.SchedulerFactoryBean.registerJo       
  165. bsAndTriggers(SchedulerFactoryBean.java:776)       
  166.         at org.springframework.scheduling.quartz.SchedulerFactoryBean.afterPrope       
  167. rtiesSet(SchedulerFactoryBean.java:599)       
  168.         at org.springframework.beans.factory.support.AbstractAutowireCapableBean       
  169. Factory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1118)       
  170.         at org.springframework.beans.factory.support.AbstractAutowireCapableBean       
  171. Factory.initializeBean(AbstractAutowireCapableBeanFactory.java:1085)       
  172.         at org.springframework.beans.factory.support.AbstractAutowireCapableBean       
  173. Factory.createBean(AbstractAutowireCapableBeanFactory.java:429)       
  174.         at org.springframework.beans.factory.support.AbstractBeanFactory$1.getOb       
  175. ject(AbstractBeanFactory.java:250)       
  176.         at org.springframework.beans.factory.support.DefaultSingletonBeanRegistr       
  177. y.getSingleton(DefaultSingletonBeanRegistry.java:141)       
  178.         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean       
  179. (AbstractBeanFactory.java:247)       
  180.         at org.springframework.beans.factory.support.AbstractBeanFactory.getBean       
  181. (AbstractBeanFactory.java:161)       
  182.         at org.springframework.beans.factory.support.DefaultListableBeanFactory.       
  183. preInstantiateSingletons(DefaultListableBeanFactory.java:270)       
  184.         at org.springframework.context.support.AbstractApplicationContext.refres       
  185. h(AbstractApplicationContext.java:346)       
  186.         at org.springframework.web.context.support.AbstractRefreshableWebApplica       
  187. tionContext.refresh(AbstractRefreshableWebApplicationContext.java:156)       
  188.         at org.springframework.web.context.ContextLoader.createWebApplicationCon       
  189. text(ContextLoader.java:246)       
  190.         at org.springframework.web.context.ContextLoader.initWebApplicationConte       
  191. xt(ContextLoader.java:184)       
  192.         at org.springframework.web.context.ContextLoaderListener.contextInitiali       
  193. zed(ContextLoaderListener.java:49)       
  194.         at org.apache.catalina.core.StandardContext.listenerStart(StandardContex       
  195. t.java:3764)       
  196.         at org.apache.catalina.core.StandardContext.start(StandardContext.java:4      
  197. 216)       
  198.         at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase       
  199. .java:760)       
  200.         at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:74      
  201. 0)       
  202.         at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544)       
  203.       
  204.         at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.jav       
  205. a:920)       
  206.         at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.j       
  207. ava:883)       
  208.         at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492      
  209. )       
  210.         at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)       
  211.         at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java       
  212. :311)       
  213.         at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(Lifecycl       
  214. eSupport.java:120)       
  215.         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)       
  216.       
  217.         at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)       
  218.         at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)       
  219.       
  220.         at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443      
  221. )       
  222.         at org.apache.catalina.core.StandardService.start(StandardService.java:4      
  223. 48)       
  224.         at org.apache.catalina.core.StandardServer.start(StandardServer.java:700      
  225. )       
  226.         at org.apache.catalina.startup.Catalina.start(Catalina.java:552)       
  227.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       
  228.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.       
  229. java:39)       
  230.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces       
  231. sorImpl.java:25)       
  232.         at java.lang.reflect.Method.invoke(Method.java:585)       
  233.         at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)       
  234.         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)       
  235. Caused by: java.io.NotSerializableException: org.apache.commons.collections.set.       
  236. ListOrderedSet       
  237.         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1075)       
  238.       
  239.         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java       
  240. :1369)       
  241.         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13      
  242. 41)       
  243.         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav       
  244. a:1284)       
  245.         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)       
  246.       
  247.         at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java       
  248. :1369)       
  249.         at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13      
  250. 41)       
  251.         at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav       
  252. a:1284)       
  253.         at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)       
  254.       
  255.         at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)       
  256.         at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.insertBlobTrigger(StdJDB       
  257. CDelegate.java:1198)       
  258.         at org.quartz.impl.jdbcjobstore.JobStoreSupport.storeTrigger(JobStoreSup       
  259. port.java:1178)       
  260.         ... 48 more      
  261.   
  262. 配置文件:   
  263.   
  264. java 代码   
  265. #\u914d\u7f6eScheduler\u7684\u57fa\u672c\u4fe1\u606f       
  266. org.quartz.scheduler.instanceName = SpringBookScheduler       
  267. org.quartz.scheduler.instanceId = AUTO       
  268.       
  269. #\u914d\u7f6eQuartz\u7684\u7ebf\u7a0b\u6c60       
  270. orgorg.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool       
  271. org.quartz.threadPool.threadCount = 25      
  272. org.quartz.threadPool.threadPriority = 5      
  273.       
  274. #\u914d\u7f6e\u6240\u91c7\u7528\u7684JobStore\u65b9\u5f0f       
  275. org.quartz.jobStore.misfireThreshold = 60000      
  276. orgorg.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX       
  277. #orgorg.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreCMT       
  278. org.quartz.jobStore.tablePrefix = QRTZ_       
  279. org.quartz.jobStore.useProperties = false      
  280.       
  281. #\u914d\u7f6eQuartz\u6301\u4e45\u5316       
  282. orgorg.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate       
  283. org.quartz.jobStore.dataSource = epDS       
  284. org.quartz.jobStore.isClustered = false      
  285. org.quartz.dataSource.epDS.driver = net.sourceforge.jtds.jdbc.Driver       
  286. org.quartz.dataSource.epDS.URL = jdbc:jtds:sqlserver://localhost:1433/epDB;user=sa;password=1234;SelectMethod=cursor;       
  287. org.quartz.dataSource.epDS.user = sa       
  288. org.quartz.dataSource.epDS.password = 1234      
  289. rog.quartz.dataSource.epDs.validationQuery = select 1      
  290.   
  291. bean调度管理文件   
  292.   
  293. java 代码   
  294. xml 代码   
  295. xml version="1.0" encoding="UTF-8"?>      
  296. <beans      
  297.     xmlns="http://www.springframework.org/schema/beans"      
  298.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      
  299.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">      
  300.           
  301.     <bean id="delImageJob"      
  302.           class="org.springframework.scheduling.quartz.JobDetailBean">      
  303.         <property name="jobClass">      
  304.             <value>ep.spring.model.quartz.DelCodeCheckJobvalue>      
  305.         property>      
  306.         <property name="jobDataAsMap">      
  307.             <map>      
  308.                 <entry key="messages">      
  309.                     <value>delCodeCheckJob 初始化 ...value>      
  310.                 entry>      
  311.             map>         
  312.         property>      
  313.               
  314.     <bean id="delImageTrigger"        
  315.           class="org.springframework.scheduling.quartz.CronTriggerBean">      
  316.         <property name="jobDetail">      
  317.             <ref local="delImageJob"/>      
  318.         property>      
  319.         <property name="cronExpression">      
  320.                   
  321.             <value>0/10 * * * * ?value>      
  322.         property>      
  323.     bean>      
  324.            
  325.     <bean id="updateIssueFlagTrigger"        
  326.           class="org.springframework.scheduling.quartz.CronTriggerBean">      
  327.         <property name="jobDetail">      
  328.             <ref local="updateIssueFlagJob"/>      
  329.         property>      
  330.         <property name="cronExpression">      
  331.                   
  332.             <value>0/10 * * * * ?value>      
  333.         property>      
  334.     bean>      
  335.            
  336.           
  337.     <bean id="schedulerFactory"      
  338.           class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >        
  339.         <property name="triggers">      
  340.             <list>      
  341.                 <ref local="delImageTrigger"/>      
  342.                 <ref local="updateIssueFlagTrigger"/>      
  343.             list>      
  344.         property>      
  345.         <property name="configLocation">      
  346.             <value>/WEB-INF/quartzJdbc.propertiesvalue>      
  347.         property>      
  348.     bean>      
  349. beans>      
  350.   
  351.     
  352.   
  353. job代码   
  354.   
  355. java 代码   
  356. public class   UpdTradeIssueFlagJob implements StatefulJob,Serializable{      
  357.     private transient ApplicationContext context ;      
  358.     private transient ITradeBS itbss;      
  359.     private transient int  updateCount ;      
  360.     private transient Map mapMsg;      
  361.     public UpdTradeIssueFlagJob(){}      
  362.     public void execute(JobExecutionContext jec) throws JobExecutionException{      
  363.         mapMsg = jec.getMergedJobDataMap();      
  364.         context = (ApplicationContext)mapMsg.get("applicationContext");      
  365.         itbss = (ITradeBS)context.getBean("trade_bs_impl");      
  366.         updateCount = itbss.updateTradeIssueFlagMsg();      
  367.         if(updateCount >0)      
  368.             mapMsg.put("messages", "行业资讯按时更新发布了 "+ updateCount + " 记录.");      
  369.         else     
  370.             mapMsg.put("messages", "行业资讯没有按时更新发布的记录.");      
  371.         String outMsg = (String)mapMsg.get("messages");      
  372.         System.out.println("[任务:"+jec.getJobDetail().getName()+"]"+outMsg);      
  373.     }      
  374. }      
   发表时间:2007-10-24  
当不把任何填写进数据库是正常的!!
根据相关信息我已把job中的有关实例用transient来标示,也序列化了该job,可还是出现如上错误,望大家能解决一下!!感谢万分..

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'schedulerFactory' defined in ServletContext resource [/WEB-INF/quartz.xml]: Invocation of init method failed; nested exception is org.quartz.JobPersistenceException: Couldn't store trigger: org.apache.commons.collections.set.ListOrderedSet [See nested exception: java.io.NotSerializableException: org.apache.commons.collections.set.ListOrderedSet]       
Caused by:       
org.quartz.JobPersistenceException: Couldn't store trigger: org.apache.commons.collections.set.ListOrderedSet [See nested exception: java.io.NotSerializableException: org.apache.commons.collections.set.ListOrderedSet]    
0 请登录后投票
   发表时间:2007-10-24  
哪位兄弟知道!!能帮助一下。。。。谢谢
0 请登录后投票
   发表时间:2007-10-25  
贴了两天啦都没人能解答吗?
0 请登录后投票
   发表时间:2007-10-29  
换个包commons.collections
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics