diff --git a/xfg-frame-archetype-lite-app/data/log/log-error-2024-11-17.0.log b/xfg-frame-archetype-lite-app/data/log/log-error-2024-11-17.0.log new file mode 100644 index 0000000000000000000000000000000000000000..8b93cb2f290f41dac29cc542026a8682e6fb9e06 --- /dev/null +++ b/xfg-frame-archetype-lite-app/data/log/log-error-2024-11-17.0.log @@ -0,0 +1,301 @@ +24-11-14.20:34:41.828 [main ] WARN GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyArmory': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 +24-11-14.20:34:41.872 [main ] ERROR SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyArmory': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) + at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) + at org.junit.runners.ParentRunner.run(ParentRunner.java:413) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 43 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 59 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 75 common frames omitted +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) + ... 91 common frames omitted +Caused by: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$0(ConnectionPool.java:132) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.connection.pool.ConnectionPool.promiseFailure(ConnectionPool.java:294) + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$6(ConnectionPool.java:253) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.client.RedisClient$1$2.run(RedisClient.java:257) + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +Caused by: java.util.concurrent.CompletionException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 + at java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:326) + at java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:338) + at java.util.concurrent.CompletableFuture.uniRelay(CompletableFuture.java:925) + at java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:913) + ... 11 common frames omitted +Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 +Caused by: java.net.ConnectException: Connection refused: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716) + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +24-11-14.20:34:41.875 [main ] ERROR TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@4009e306] to prepare test instance [cn.bugstack.test.domain.StrategyArmoryDispatchTest@f2d890c] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) + at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) + at org.junit.runners.ParentRunner.run(ParentRunner.java:413) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyArmory': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90) + ... 27 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 43 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 59 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 75 common frames omitted +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) + ... 91 common frames omitted +Caused by: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$0(ConnectionPool.java:132) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.connection.pool.ConnectionPool.promiseFailure(ConnectionPool.java:294) + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$6(ConnectionPool.java:253) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.client.RedisClient$1$2.run(RedisClient.java:257) + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +Caused by: java.util.concurrent.CompletionException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 + at java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:326) + at java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:338) + at java.util.concurrent.CompletableFuture.uniRelay(CompletableFuture.java:925) + at java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:913) + ... 11 common frames omitted +Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 +Caused by: java.net.ConnectException: Connection refused: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716) + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +24-11-17.20:59:58.453 [HikariPool-1 housekeeper] WARN HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=5m30s279ms767µs600ns). diff --git a/xfg-frame-archetype-lite-app/data/log/log-info-2024-11-17.0.log b/xfg-frame-archetype-lite-app/data/log/log-info-2024-11-17.0.log new file mode 100644 index 0000000000000000000000000000000000000000..db8719a9bc0d76b3ea24acee477520edc43901b6 --- /dev/null +++ b/xfg-frame-archetype-lite-app/data/log/log-info-2024-11-17.0.log @@ -0,0 +1,688 @@ +24-11-14.18:28:38.842 [main ] INFO AwardDaoTest - Starting AwardDaoTest using Java 1.8.0_412 on zhaoyongfeng with PID 13068 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-14.18:28:38.844 [main ] INFO AwardDaoTest - The following 1 profile is active: "dev" +24-11-14.18:28:39.968 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-14.18:28:39.973 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-14.18:28:40.010 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 21 ms. Found 0 Redis repository interfaces. +24-11-14.18:28:44.017 [main ] INFO Version - Redisson 3.23.4 +24-11-14.18:28:45.569 [redisson-netty-2-5] INFO MasterPubSubConnectionPool - 1 connections initialized for localhost/127.0.0.1:6379 +24-11-14.18:28:45.697 [redisson-netty-2-20] INFO MasterConnectionPool - 24 connections initialized for localhost/127.0.0.1:6379 +24-11-14.18:28:46.573 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-14.18:28:46.681 [main ] INFO AwardDaoTest - Started AwardDaoTest in 8.429 seconds (JVM running for 9.788) +24-11-14.18:28:47.107 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-14.18:28:47.522 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-14.18:28:47.601 [main ] INFO AwardDaoTest - 测试结果:[Award(id=null, awardId=101, awardKey=user_credit_random, awardConfig=1,100, awardDesc=用户积分【优先透彻规则范围,如果没有则走配置】, createTime=null, updateTime=null), Award(id=null, awardId=102, awardKey=openai_use_count, awardConfig=5, awardDesc=OpenAI 增加使用次数, createTime=null, updateTime=null), Award(id=null, awardId=103, awardKey=openai_use_count, awardConfig=10, awardDesc=OpenAI 增加使用次数, createTime=null, updateTime=null), Award(id=null, awardId=104, awardKey=openai_use_count, awardConfig=20, awardDesc=OpenAI 增加使用次数, createTime=null, updateTime=null), Award(id=null, awardId=105, awardKey=openai_model, awardConfig=gpt-4, awardDesc=OpenAI 增加模型, createTime=null, updateTime=null), Award(id=null, awardId=106, awardKey=openai_model, awardConfig=dall-e-2, awardDesc=OpenAI 增加模型, createTime=null, updateTime=null), Award(id=null, awardId=107, awardKey=openai_model, awardConfig=dall-e-3, awardDesc=OpenAI 增加模型, createTime=null, updateTime=null), Award(id=null, awardId=108, awardKey=openai_use_count, awardConfig=100, awardDesc=OpenAI 增加使用次数, createTime=null, updateTime=null), Award(id=null, awardId=109, awardKey=openai_model, awardConfig=gpt-4,dall-e-2,dall-e-3, awardDesc=OpenAI 增加模型, createTime=null, updateTime=null), Award(id=null, awardId=100, awardKey=user_credit_blacklist, awardConfig=1, awardDesc=黑名单积分, createTime=null, updateTime=null)] +24-11-14.18:28:47.637 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-14.18:28:47.661 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-14.20:34:24.958 [main ] INFO StrategyArmoryTest - Starting StrategyArmoryTest using Java 1.8.0_412 on zhaoyongfeng with PID 21492 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-14.20:34:24.960 [main ] INFO StrategyArmoryTest - The following 1 profile is active: "dev" +24-11-14.20:34:26.080 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-14.20:34:26.084 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-14.20:34:26.136 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 32 ms. Found 0 Redis repository interfaces. +24-11-14.20:34:28.965 [main ] INFO Version - Redisson 3.23.4 +24-11-14.20:34:41.828 [main ] WARN GenericWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyArmory': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 +24-11-14.20:34:41.841 [main ] INFO ConditionEvaluationReportLoggingListener - + +Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. +24-11-14.20:34:41.872 [main ] ERROR SpringApplication - Application run failed +org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyArmory': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) + at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) + at org.junit.runners.ParentRunner.run(ParentRunner.java:413) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 43 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 59 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 75 common frames omitted +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) + ... 91 common frames omitted +Caused by: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$0(ConnectionPool.java:132) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.connection.pool.ConnectionPool.promiseFailure(ConnectionPool.java:294) + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$6(ConnectionPool.java:253) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.client.RedisClient$1$2.run(RedisClient.java:257) + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +Caused by: java.util.concurrent.CompletionException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 + at java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:326) + at java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:338) + at java.util.concurrent.CompletableFuture.uniRelay(CompletableFuture.java:925) + at java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:913) + ... 11 common frames omitted +Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 +Caused by: java.net.ConnectException: Connection refused: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716) + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +24-11-14.20:34:41.875 [main ] ERROR TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener@4009e306] to prepare test instance [cn.bugstack.test.domain.StrategyArmoryDispatchTest@f2d890c] +java.lang.IllegalStateException: Failed to load ApplicationContext + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:98) + at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124) + at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190) + at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132) + at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289) + at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97) + at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) + at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) + at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) + at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) + at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) + at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) + at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) + at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) + at org.junit.runners.ParentRunner.run(ParentRunner.java:413) + at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190) + at org.junit.runner.JUnitCore.run(JUnitCore.java:137) + at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) + at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) + at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) + at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) + at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:232) + at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55) +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyArmory': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:920) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) + at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:136) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:141) + at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:90) + ... 27 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'strategyRepository': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 43 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1431) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:619) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) + at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) + at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:544) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 59 common frames omitted +Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redissonClient' defined in class path resource [cn/bugstack/config/RedisClientConfig.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:638) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.resolveBeanByName(AbstractAutowireCapableBeanFactory.java:479) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:550) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:520) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:673) + at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:228) + at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) + at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:329) + ... 75 common frames omitted +Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'redissonClient' threw exception; nested exception is org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) + ... 91 common frames omitted +Caused by: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 127.0.0.1/127.0.0.1:16379 + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$0(ConnectionPool.java:132) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.connection.pool.ConnectionPool.promiseFailure(ConnectionPool.java:294) + at org.redisson.connection.pool.ConnectionPool.lambda$createConnection$6(ConnectionPool.java:253) + at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:774) + at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:750) + at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:488) + at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:1990) + at org.redisson.client.RedisClient$1$2.run(RedisClient.java:257) + at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174) + at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167) + at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +Caused by: java.util.concurrent.CompletionException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 + at java.util.concurrent.CompletableFuture.encodeRelay(CompletableFuture.java:326) + at java.util.concurrent.CompletableFuture.completeRelay(CompletableFuture.java:338) + at java.util.concurrent.CompletableFuture.uniRelay(CompletableFuture.java:925) + at java.util.concurrent.CompletableFuture$UniRelay.tryFire(CompletableFuture.java:913) + ... 11 common frames omitted +Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: 127.0.0.1/127.0.0.1:16379 +Caused by: java.net.ConnectException: Connection refused: no further information + at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) + at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716) + at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:337) + at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334) + at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) + at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) + at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) + at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) + at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) + at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) + at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) + at java.lang.Thread.run(Thread.java:750) +24-11-14.20:35:17.190 [main ] INFO StrategyArmoryTest - Starting StrategyArmoryTest using Java 1.8.0_412 on zhaoyongfeng with PID 29800 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-14.20:35:17.191 [main ] INFO StrategyArmoryTest - The following 1 profile is active: "dev" +24-11-14.20:35:18.215 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-14.20:35:18.222 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-14.20:35:18.281 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 40 ms. Found 0 Redis repository interfaces. +24-11-14.20:35:20.873 [main ] INFO Version - Redisson 3.23.4 +24-11-14.20:35:22.401 [redisson-netty-2-5] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.20:35:22.416 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.20:35:24.829 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-14.20:35:24.917 [main ] INFO StrategyArmoryTest - Started StrategyArmoryTest in 8.301 seconds (JVM running for 9.514) +24-11-14.20:35:25.387 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-14.20:35:25.734 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-14.20:48:21.469 [main ] INFO StrategyArmoryTest - Starting StrategyArmoryTest using Java 1.8.0_412 on zhaoyongfeng with PID 10720 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-14.20:48:21.470 [main ] INFO StrategyArmoryTest - The following 1 profile is active: "dev" +24-11-14.20:48:22.498 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-14.20:48:22.502 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-14.20:48:22.550 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 30 ms. Found 0 Redis repository interfaces. +24-11-14.20:48:25.106 [main ] INFO Version - Redisson 3.23.4 +24-11-14.20:48:26.654 [redisson-netty-2-5] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.20:48:26.669 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.20:48:29.119 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-14.20:48:29.201 [main ] INFO StrategyArmoryTest - Started StrategyArmoryTest in 8.251 seconds (JVM running for 9.451) +24-11-14.20:48:29.640 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-14.20:48:29.953 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-14.20:48:30.141 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-14.20:48:30.151 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-14.21:31:44.058 [main ] INFO StrategyArmoryTest - Starting StrategyArmoryTest using Java 1.8.0_412 on zhaoyongfeng with PID 23272 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-14.21:31:44.059 [main ] INFO StrategyArmoryTest - The following 1 profile is active: "dev" +24-11-14.21:31:45.122 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-14.21:31:45.126 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-14.21:31:45.173 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 31 ms. Found 0 Redis repository interfaces. +24-11-14.21:31:47.899 [main ] INFO Version - Redisson 3.23.4 +24-11-14.21:31:49.517 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.21:31:49.537 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.21:31:52.254 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-14.21:31:52.388 [main ] INFO StrategyArmoryTest - Started StrategyArmoryTest in 8.955 seconds (JVM running for 10.172) +24-11-14.21:31:52.899 [main ] INFO StrategyArmoryTest - 测试结果:110 - 奖品ID值 +24-11-14.21:32:17.345 [main ] INFO StrategyArmoryTest - Starting StrategyArmoryTest using Java 1.8.0_412 on zhaoyongfeng with PID 29904 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-14.21:32:17.346 [main ] INFO StrategyArmoryTest - The following 1 profile is active: "dev" +24-11-14.21:32:18.391 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-14.21:32:18.395 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-14.21:32:18.449 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 36 ms. Found 0 Redis repository interfaces. +24-11-14.21:32:21.062 [main ] INFO Version - Redisson 3.23.4 +24-11-14.21:32:22.602 [redisson-netty-2-5] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.21:32:22.616 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-14.21:32:24.978 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-14.21:32:25.062 [main ] INFO StrategyArmoryTest - Started StrategyArmoryTest in 8.245 seconds (JVM running for 9.4) +24-11-14.21:32:25.538 [main ] INFO StrategyArmoryTest - 测试结果:110 - 奖品ID值 +24-11-14.21:32:25.541 [main ] INFO StrategyArmoryTest - 测试结果:110 - 奖品ID值 +24-11-14.21:32:25.543 [main ] INFO StrategyArmoryTest - 测试结果:110 - 奖品ID值 +24-11-14.21:32:25.546 [main ] INFO StrategyArmoryTest - 测试结果:111 - 奖品ID值 +24-11-14.21:32:25.549 [main ] INFO StrategyArmoryTest - 测试结果:111 - 奖品ID值 +24-11-17.17:19:29.708 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 22232 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:19:29.709 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:19:30.889 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:19:30.894 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:19:30.966 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 50 ms. Found 0 Redis repository interfaces. +24-11-17.17:19:33.717 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:19:35.324 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:19:35.339 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:19:37.861 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:19:37.945 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.881 seconds (JVM running for 10.163) +24-11-17.17:19:38.397 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:19:38.766 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:19:38.908 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:19:38.924 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:25:57.400 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 16100 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:25:57.402 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:25:58.495 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:25:58.500 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:25:58.567 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 47 ms. Found 0 Redis repository interfaces. +24-11-17.17:26:01.166 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:26:02.702 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:26:02.718 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:26:05.216 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:26:05.297 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.446 seconds (JVM running for 9.661) +24-11-17.17:26:05.743 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:26:06.046 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:26:06.185 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:26:06.196 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:28:15.175 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 19732 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:28:15.176 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:28:16.283 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:28:16.288 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:28:16.359 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 50 ms. Found 0 Redis repository interfaces. +24-11-17.17:28:19.102 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:28:20.711 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:28:20.725 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:28:23.519 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:28:23.644 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 9.112 seconds (JVM running for 11.001) +24-11-17.17:28:24.102 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:28:24.479 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:28:38.175 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:28:38.191 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:30:31.698 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 22160 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:30:31.700 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:30:32.759 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:30:32.763 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:30:32.825 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 46 ms. Found 0 Redis repository interfaces. +24-11-17.17:30:35.458 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:30:37.014 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:30:37.031 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:30:39.404 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:30:39.492 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.327 seconds (JVM running for 9.493) +24-11-17.17:30:39.924 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:30:40.228 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:30:40.357 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:30:40.371 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:33:48.611 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 4684 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:33:48.612 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:33:49.691 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:33:49.697 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:33:49.771 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 52 ms. Found 0 Redis repository interfaces. +24-11-17.17:33:52.638 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:33:54.196 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:33:54.212 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:33:56.962 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:33:57.065 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.963 seconds (JVM running for 10.442) +24-11-17.17:33:57.530 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:33:57.836 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:33:58.014 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:33:58.034 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:36:01.078 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 1196 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:36:01.079 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:36:02.123 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:36:02.128 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:36:02.196 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 48 ms. Found 0 Redis repository interfaces. +24-11-17.17:36:04.876 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:36:07.276 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:36:07.299 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:36:10.343 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:36:10.464 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 9.983 seconds (JVM running for 11.272) +24-11-17.17:36:10.942 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:36:11.251 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:36:11.388 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:36:11.400 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:37:13.199 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 16096 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:37:13.200 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:37:14.291 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:37:14.296 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:37:14.359 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 45 ms. Found 0 Redis repository interfaces. +24-11-17.17:37:17.190 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:37:19.016 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:37:19.034 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:37:22.218 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:37:22.326 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 9.772 seconds (JVM running for 11.516) +24-11-17.17:37:22.755 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:37:23.077 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:37:28.482 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:37:28.498 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:47:54.374 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 12832 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:47:54.375 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:47:55.549 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:47:55.556 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:47:55.632 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 52 ms. Found 0 Redis repository interfaces. +24-11-17.17:47:58.279 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:47:59.862 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:47:59.879 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:48:02.397 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:48:02.481 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.622 seconds (JVM running for 9.817) +24-11-17.17:48:02.918 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:48:03.234 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:48:03.414 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:48:03.422 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.17:50:04.558 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 9632 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.17:50:04.558 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.17:50:05.611 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.17:50:05.615 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.17:50:05.674 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 43 ms. Found 0 Redis repository interfaces. +24-11-17.17:50:08.319 [main ] INFO Version - Redisson 3.23.4 +24-11-17.17:50:09.873 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:50:09.887 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.17:50:12.604 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.17:50:12.726 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.681 seconds (JVM running for 9.862) +24-11-17.17:50:13.187 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.17:50:13.499 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.17:50:13.646 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.17:50:13.657 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.19:19:01.235 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 19204 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.19:19:01.237 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.19:19:02.471 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.19:19:02.476 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.19:19:02.550 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 56 ms. Found 0 Redis repository interfaces. +24-11-17.19:19:05.459 [main ] INFO Version - Redisson 3.23.4 +24-11-17.19:19:07.180 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:19:07.196 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:19:09.960 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.19:19:10.083 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 9.519 seconds (JVM running for 11.04) +24-11-17.19:19:10.517 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.19:19:10.834 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.19:19:10.974 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.19:19:10.981 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.19:23:13.427 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 21928 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.19:23:13.429 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.19:23:14.694 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.19:23:14.699 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.19:23:14.771 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 50 ms. Found 0 Redis repository interfaces. +24-11-17.19:23:17.520 [main ] INFO Version - Redisson 3.23.4 +24-11-17.19:23:19.087 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:23:19.104 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:23:21.819 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.19:23:21.921 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 9.064 seconds (JVM running for 10.328) +24-11-17.19:23:22.385 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.19:23:22.750 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.19:23:22.868 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100001 ruleModel:rule_blacklist +24-11-17.19:24:47.132 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.19:24:47.148 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.19:25:05.474 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 12948 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.19:25:05.475 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.19:25:06.571 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.19:25:06.575 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.19:25:06.636 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 0 Redis repository interfaces. +24-11-17.19:25:09.251 [main ] INFO Version - Redisson 3.23.4 +24-11-17.19:25:11.023 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:25:11.045 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:25:13.916 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.19:25:14.005 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 9.083 seconds (JVM running for 10.303) +24-11-17.19:25:14.437 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.19:25:14.755 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.19:25:14.870 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100002 ruleModel:rule_blacklist +24-11-17.19:25:43.868 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.19:25:43.883 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.19:25:48.608 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 20048 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.19:25:48.609 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.19:25:49.750 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.19:25:49.754 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.19:25:49.821 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 49 ms. Found 0 Redis repository interfaces. +24-11-17.19:25:52.562 [main ] INFO Version - Redisson 3.23.4 +24-11-17.19:25:54.192 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:25:54.206 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:25:56.746 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.19:25:56.850 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.802 seconds (JVM running for 9.997) +24-11-17.19:25:57.342 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:user003 strategyId:100001 ruleModel:rule_blacklist +24-11-17.19:25:57.407 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.19:25:57.808 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.19:26:31.931 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.19:26:31.946 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.19:35:16.877 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 3568 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.19:35:16.879 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.19:35:18.321 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.19:35:18.327 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.19:35:18.396 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 49 ms. Found 0 Redis repository interfaces. +24-11-17.19:35:21.305 [main ] INFO Version - Redisson 3.23.4 +24-11-17.19:35:22.971 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:35:22.992 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.19:35:25.781 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.19:35:25.920 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 9.685 seconds (JVM running for 11.098) +24-11-17.19:35:26.515 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:user003 strategyId:100001 ruleModel:rule_blacklist +24-11-17.19:35:26.562 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.19:35:26.894 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.20:59:58.453 [HikariPool-1 housekeeper] WARN HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta=5m30s279ms767µs600ns). +24-11-17.21:05:17.068 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.21:05:17.079 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.23:01:14.808 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 24732 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.23:01:14.810 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.23:01:15.895 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.23:01:15.900 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.23:01:15.968 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 47 ms. Found 0 Redis repository interfaces. +24-11-17.23:01:18.707 [main ] INFO Version - Redisson 3.23.4 +24-11-17.23:01:20.294 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:01:20.311 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:01:22.724 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.23:01:22.811 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.632 seconds (JVM running for 9.977) +24-11-17.23:01:23.312 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100002 ruleModel:rule_blacklist +24-11-17.23:01:23.373 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.23:01:23.770 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.23:01:23.869 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.23:01:23.871 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.23:03:47.237 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 16520 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.23:03:47.239 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.23:03:48.444 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.23:03:48.450 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.23:03:48.525 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 52 ms. Found 0 Redis repository interfaces. +24-11-17.23:03:51.312 [main ] INFO Version - Redisson 3.23.4 +24-11-17.23:03:52.867 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:03:52.880 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:04:03.278 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.23:04:03.419 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 16.827 seconds (JVM running for 18.341) +24-11-17.23:04:07.400 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100002 ruleModel:rule_blacklist +24-11-17.23:04:27.723 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 24612 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.23:04:27.724 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.23:04:28.888 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.23:04:28.893 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.23:04:28.964 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 52 ms. Found 0 Redis repository interfaces. +24-11-17.23:04:31.672 [main ] INFO Version - Redisson 3.23.4 +24-11-17.23:04:33.221 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:04:33.235 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:04:35.828 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.23:04:35.921 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.787 seconds (JVM running for 10.016) +24-11-17.23:04:36.409 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100001 ruleModel:rule_blacklist +24-11-17.23:04:36.449 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.23:04:36.754 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.23:04:36.799 [main ] INFO RuleWeightLogicFilter - 规则过滤-权重范围 userId:xiaofuge strategyId:100001 ruleModel:rule_weight +24-11-17.23:04:36.805 [main ] INFO DefaultRaffleStrategy - 抽奖前规则过滤 userId: xiaofuge ruleModel: rule_weight code: 0001 info: 接管;后续的流程,受规则引擎执行结果影响 +24-11-17.23:04:36.847 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.23:04:36.855 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.23:06:34.772 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 6000 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.23:06:34.774 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.23:06:35.787 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.23:06:35.791 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.23:06:35.851 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 0 Redis repository interfaces. +24-11-17.23:06:38.443 [main ] INFO Version - Redisson 3.23.4 +24-11-17.23:06:39.986 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:06:40.000 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:06:42.379 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.23:06:42.475 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.23 seconds (JVM running for 9.393) +24-11-17.23:06:42.928 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:user003 strategyId:100001 ruleModel:rule_blacklist +24-11-17.23:06:42.972 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.23:06:43.265 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.23:06:43.514 [main ] INFO RaffleStrategyTest - 请求参数:{"strategyId":100001,"userId":"user003"} +24-11-17.23:06:43.517 [main ] INFO RaffleStrategyTest - 测试结果:{"awardId":100} +24-11-17.23:06:43.549 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.23:06:43.565 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.23:11:41.630 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 23860 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.23:11:41.631 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.23:11:42.697 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.23:11:42.702 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.23:11:42.762 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 43 ms. Found 0 Redis repository interfaces. +24-11-17.23:11:46.284 [main ] INFO Version - Redisson 3.23.4 +24-11-17.23:11:48.201 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:11:48.215 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:12:15.426 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.23:12:15.542 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 34.499 seconds (JVM running for 35.898) +24-11-17.23:12:55.591 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100001 ruleModel:rule_blacklist +24-11-17.23:12:55.748 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.23:12:57.211 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.23:12:57.403 [main ] INFO RuleWeightLogicFilter - 规则过滤-权重范围 userId:xiaofuge strategyId:100001 ruleModel:rule_weight +24-11-17.23:12:57.416 [main ] INFO DefaultRaffleStrategy - 抽奖前规则过滤 userId: xiaofuge ruleModel: rule_weight code: 0001 info: 接管;后续的流程,受规则引擎执行结果影响 +24-11-17.23:14:04.388 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.23:14:04.407 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.23:14:46.120 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 22024 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.23:14:46.121 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.23:14:47.200 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.23:14:47.204 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.23:14:47.264 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 44 ms. Found 0 Redis repository interfaces. +24-11-17.23:14:50.756 [main ] INFO Version - Redisson 3.23.4 +24-11-17.23:14:52.610 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:14:52.624 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:14:55.851 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.23:14:55.963 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 10.382 seconds (JVM running for 11.787) +24-11-17.23:15:22.828 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100001 ruleModel:rule_blacklist +24-11-17.23:15:22.897 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.23:15:23.616 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.23:15:23.692 [main ] INFO RuleWeightLogicFilter - 规则过滤-权重范围 userId:xiaofuge strategyId:100001 ruleModel:rule_weight +24-11-17.23:15:23.698 [main ] INFO DefaultRaffleStrategy - 抽奖前规则过滤 userId: xiaofuge ruleModel: rule_weight code: 0001 info: 接管;后续的流程,受规则引擎执行结果影响 +24-11-17.23:15:43.239 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.23:15:43.251 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. +24-11-17.23:42:39.215 [main ] INFO RaffleStrategyTest - Starting RaffleStrategyTest using Java 1.8.0_412 on zhaoyongfeng with PID 19244 (started by zhaoyongfeng in C:\Users\31126\Desktop\study\xfg-frame-archetype-lite\xfg-frame-archetype-lite-app) +24-11-17.23:42:39.217 [main ] INFO RaffleStrategyTest - The following 1 profile is active: "dev" +24-11-17.23:42:40.422 [main ] INFO RepositoryConfigurationDelegate - Multiple Spring Data modules found, entering strict repository configuration mode +24-11-17.23:42:40.427 [main ] INFO RepositoryConfigurationDelegate - Bootstrapping Spring Data Redis repositories in DEFAULT mode. +24-11-17.23:42:40.494 [main ] INFO RepositoryConfigurationDelegate - Finished Spring Data repository scanning in 43 ms. Found 0 Redis repository interfaces. +24-11-17.23:42:43.219 [main ] INFO Version - Redisson 3.23.4 +24-11-17.23:42:44.768 [redisson-netty-2-4] INFO MasterPubSubConnectionPool - 1 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:42:44.782 [redisson-netty-2-13] INFO MasterConnectionPool - 5 connections initialized for 127.0.0.1/127.0.0.1:6379 +24-11-17.23:42:47.306 [main ] INFO EndpointLinksResolver - Exposing 1 endpoint(s) beneath base path '/actuator' +24-11-17.23:42:47.396 [main ] INFO RaffleStrategyTest - Started RaffleStrategyTest in 8.735 seconds (JVM running for 9.888) +24-11-17.23:42:47.895 [main ] INFO RuleBackListLogicFilter - 规则过滤-黑名单 userId:xiaofuge strategyId:100001 ruleModel:rule_blacklist +24-11-17.23:42:47.936 [main ] INFO HikariDataSource - HikariPool-1 - Starting... +24-11-17.23:42:48.259 [main ] INFO HikariDataSource - HikariPool-1 - Start completed. +24-11-17.23:42:48.306 [main ] INFO RuleWeightLogicFilter - 规则过滤-权重范围 userId:xiaofuge strategyId:100001 ruleModel:rule_weight +24-11-17.23:42:48.311 [main ] INFO DefaultRaffleStrategy - 抽奖前规则过滤 userId: xiaofuge ruleModel: rule_weight code: 0001 info: 接管;后续的流程,受规则引擎执行结果影响 +24-11-17.23:42:48.353 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown initiated... +24-11-17.23:42:48.356 [SpringApplicationShutdownHook] INFO HikariDataSource - HikariPool-1 - Shutdown completed. diff --git a/xfg-frame-archetype-lite-app/src/main/resources/mybatis/mapper/strategy_award_mapper.xml b/xfg-frame-archetype-lite-app/src/main/resources/mybatis/mapper/strategy_award_mapper.xml index 29972809552d9a98500734193665da071fe55338..67ee71dc99300591671fc9598edacb7e08be1955 100644 --- a/xfg-frame-archetype-lite-app/src/main/resources/mybatis/mapper/strategy_award_mapper.xml +++ b/xfg-frame-archetype-lite-app/src/main/resources/mybatis/mapper/strategy_award_mapper.xml @@ -28,5 +28,10 @@ where strategy_id = #{strategy_id} + + diff --git a/xfg-frame-archetype-lite-app/src/test/java/cn/bugstack/test/domain/LogicChainTest.java b/xfg-frame-archetype-lite-app/src/test/java/cn/bugstack/test/domain/LogicChainTest.java new file mode 100644 index 0000000000000000000000000000000000000000..c915b82c955987421fa6ec65768fe2c225a46f6f --- /dev/null +++ b/xfg-frame-archetype-lite-app/src/test/java/cn/bugstack/test/domain/LogicChainTest.java @@ -0,0 +1,67 @@ +package cn.bugstack.test.domain; + +import cn.bugstack.domain.strategy.service.armory.IStrategyArmory; +import cn.bugstack.domain.strategy.service.rule.chain.ILogicChain; +import cn.bugstack.domain.strategy.service.rule.chain.factory.DefaultChainFactory; +import cn.bugstack.domain.strategy.service.rule.chain.impl.RuleWeightLogicChain; +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import javax.annotation.Resource; + +/** + * @ClassName: LogicChainTest + * @Description: + * @Author: zhaoyongfeng + * @Date: 2024/11/18 22:49 + */ +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest +public class LogicChainTest { + @Resource + private IStrategyArmory strategyArmory; + @Resource + private RuleWeightLogicChain ruleWeightLogicChain; + @Resource + private DefaultChainFactory defaultChainFactory; + + @Before + public void setUp() { + // 策略装配 100001、100002、100003 + log.info("测试结果:{}", strategyArmory.assembleLotteryStrategy(100001L)); + // log.info("测试结果:{}", strategyArmory.assembleLotteryStrategy(100002L)); + // log.info("测试结果:{}", strategyArmory.assembleLotteryStrategy(100003L)); + } + + @Test + public void test_LogicChain_rule_blacklist() { + ILogicChain logicChain = defaultChainFactory.openLogicChain(100001L); + Integer awardId = logicChain.logic("user001", 100001L); + log.info("测试结果:{}", awardId); + } + + @Test + public void test_LogicChain_rule_weight() { + // 通过反射 mock 规则中的值 + ReflectionTestUtils.setField(ruleWeightLogicChain, "userScore", 4900L); + + ILogicChain logicChain = defaultChainFactory.openLogicChain(100001L); + Integer awardId = logicChain.logic("xiaofuge", 100001L); + log.info("测试结果:{}", awardId); + } + + @Test + public void test_LogicChain_rule_default() { + ILogicChain logicChain = defaultChainFactory.openLogicChain(100001L); + Integer awardId = logicChain.logic("xiaofuge", 100001L); + log.info("测试结果:{}", awardId); + } + +} + diff --git a/xfg-frame-archetype-lite-app/src/test/java/cn/bugstack/test/domain/RaffleStrategyTest.java b/xfg-frame-archetype-lite-app/src/test/java/cn/bugstack/test/domain/RaffleStrategyTest.java index 0dd43dc61830f7a217bcd49247d83d5d60b05ed4..98ef0becdbd6d4f55aba9e6b308d2eb68249a60d 100644 --- a/xfg-frame-archetype-lite-app/src/test/java/cn/bugstack/test/domain/RaffleStrategyTest.java +++ b/xfg-frame-archetype-lite-app/src/test/java/cn/bugstack/test/domain/RaffleStrategyTest.java @@ -2,8 +2,10 @@ package cn.bugstack.test.domain; import cn.bugstack.domain.strategy.model.entity.RaffleAwardEntity; import cn.bugstack.domain.strategy.model.entity.RaffleFactorEntity; -import cn.bugstack.domain.strategy.service.IRaffleStrategy; -import cn.bugstack.domain.strategy.service.rule.impl.RuleWeightLogicFilter; +import cn.bugstack.domain.strategy.IRaffleStrategy; +import cn.bugstack.domain.strategy.service.armory.IStrategyArmory; +import cn.bugstack.domain.strategy.service.rule.chain.impl.DefaultLogicChain; +import cn.bugstack.domain.strategy.service.rule.chain.impl.RuleWeightLogicChain; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.junit.Before; @@ -14,7 +16,6 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.util.ReflectionTestUtils; import javax.annotation.Resource; -import java.security.PrivateKey; /** * @ClassName: RaffleStrategyTest @@ -26,14 +27,27 @@ import java.security.PrivateKey; @Slf4j @RunWith(SpringRunner.class) public class RaffleStrategyTest { + @Resource + private IStrategyArmory strategyArmory; @Resource private IRaffleStrategy raffleStrategy; @Resource - private RuleWeightLogicFilter ruleWeightLogicFilter; + private RuleWeightLogicChain ruleWeightLogicChain; + @Resource + private DefaultLogicChain defaultLogicChain; + @Before public void setUp() { - ReflectionTestUtils.setField(ruleWeightLogicFilter, "userScore", 4500L); + // 策略装配 100001、100002、100003 + log.info("测试结果:{}", strategyArmory.assembleLotteryStrategy(100001L)); +/* log.info("测试结果:{}", strategyArmory.assembleLotteryStrategy(100002L)); + log.info("测试结果:{}", strategyArmory.assembleLotteryStrategy(100003L));*/ + + // 通过反射 mock 规则中的值 + ReflectionTestUtils.setField(ruleWeightLogicChain, "userScore", 40500L); + ReflectionTestUtils.setField(defaultLogicChain, "userRaffleCount", 10L); } + @Test public void test_performRaffle() { RaffleFactorEntity raffleFactorEntity = RaffleFactorEntity.builder() @@ -60,6 +74,24 @@ public class RaffleStrategyTest { log.info("测试结果:{}", JSON.toJSONString(raffleAwardEntity)); } + /** + * 次数错校验,抽奖n次后解锁。100003 策略,你可以通过调整 @Before 的 setUp 方法中个人抽奖次数来验证。比如最开始设置0,之后设置10 + * ReflectionTestUtils.setField(ruleLockLogicFilter, "userRaffleCount", 10L); + */ + @Test + public void test_raffle_center_rule_lock(){ + RaffleFactorEntity raffleFactorEntity = RaffleFactorEntity.builder() + .userId("xiaofuge") + .strategyId(100003L) + .build(); + + RaffleAwardEntity raffleAwardEntity = raffleStrategy.performRaffle(raffleFactorEntity); + + log.info("请求参数:{}", JSON.toJSONString(raffleFactorEntity)); + log.info("测试结果:{}", JSON.toJSONString(raffleAwardEntity)); + } + + } diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/raffle/AbstractRaffleStrategy.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/AbstractRaffleStrategy.java similarity index 51% rename from xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/raffle/AbstractRaffleStrategy.java rename to xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/AbstractRaffleStrategy.java index a2350e6a9cf1df37d90791b0478d20a0877704be..57abe2e193e983464ebd09032f0accdfc93e19cd 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/raffle/AbstractRaffleStrategy.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/AbstractRaffleStrategy.java @@ -1,14 +1,15 @@ -package cn.bugstack.domain.strategy.service.raffle; +package cn.bugstack.domain.strategy; import cn.bugstack.domain.strategy.model.entity.RaffleAwardEntity; import cn.bugstack.domain.strategy.model.entity.RaffleFactorEntity; import cn.bugstack.domain.strategy.model.entity.RuleActionEntity; import cn.bugstack.domain.strategy.model.entity.StrategyEntity; import cn.bugstack.domain.strategy.model.valobj.RuleLogicCheckTypeVO; +import cn.bugstack.domain.strategy.model.valobj.StrategyAwardRuleModelVO; import cn.bugstack.domain.strategy.repository.IStrategyRepository; -import cn.bugstack.domain.strategy.service.IRaffleStrategy; import cn.bugstack.domain.strategy.service.armory.IStrategyDispatch; -import cn.bugstack.domain.strategy.service.rule.factory.DefaultLogicFactory; +import cn.bugstack.domain.strategy.service.rule.chain.ILogicChain; +import cn.bugstack.domain.strategy.service.rule.chain.factory.DefaultChainFactory; import cn.bugstack.types.enums.ResponseCode; import cn.bugstack.types.exception.AppException; import lombok.extern.slf4j.Slf4j; @@ -27,10 +28,13 @@ public abstract class AbstractRaffleStrategy implements IRaffleStrategy { protected IStrategyRepository repository; // 策略调度服务 -> 只负责抽奖处理,通过新增接口的方式,隔离职责,不需要使用方关心或者调用抽奖的初始化 protected IStrategyDispatch strategyDispatch; + // 抽奖的责任链 -> 从抽奖的规则中,解耦出前置规则为责任链处理 + private final DefaultChainFactory defaultChainFactory; - public AbstractRaffleStrategy(IStrategyRepository repository, IStrategyDispatch strategyDispatch) { + public AbstractRaffleStrategy(IStrategyRepository repository, IStrategyDispatch strategyDispatch, DefaultChainFactory defaultChainFactory) { this.repository = repository; this.strategyDispatch = strategyDispatch; + this.defaultChainFactory = defaultChainFactory; } @Override @@ -42,37 +46,35 @@ public abstract class AbstractRaffleStrategy implements IRaffleStrategy { throw new AppException(ResponseCode.ILLEGAL_PARAMETER.getCode(), ResponseCode.ILLEGAL_PARAMETER.getInfo()); } - // 2. 策略查询 - StrategyEntity strategy = repository.queryStrategyEntityByStrategyId(strategyId); + // 2. 获取抽奖责任链 - 前置规则的责任链处理 + ILogicChain logicChain = defaultChainFactory.openLogicChain(strategyId); - // 3. 抽奖前 - 规则过滤 - RuleActionEntity ruleActionEntity = this.doCheckRaffleBeforeLogic(RaffleFactorEntity.builder().userId(userId).strategyId(strategyId).build(), strategy.ruleModels()); + // 3. 通过责任链获得,奖品ID + Integer awardId = logicChain.logic(userId, strategyId); - if (RuleLogicCheckTypeVO.TAKE_OVER.getCode().equals(ruleActionEntity.getCode())) { - if (DefaultLogicFactory.LogicModel.RULE_BLACKLIST.getCode().equals(ruleActionEntity.getRuleModel())) { - // 黑名单返回固定的奖品ID - return RaffleAwardEntity.builder() - .awardId(ruleActionEntity.getData().getAwardId()) - .build(); - } else if (DefaultLogicFactory.LogicModel.RULE_WIGHT.getCode().equals(ruleActionEntity.getRuleModel())) { - // 权重根据返回的信息进行抽奖 - RuleActionEntity.RaffleBeforeEntity raffleBeforeEntity = ruleActionEntity.getData(); - String ruleWeightValueKey = raffleBeforeEntity.getRuleWeightValueKey(); - Integer awardId = strategyDispatch.getRandomAwardId(strategyId, ruleWeightValueKey); - return RaffleAwardEntity.builder() - .awardId(awardId) - .build(); - } - } + // 4. 查询奖品规则「抽奖中(拿到奖品ID时,过滤规则)、抽奖后(扣减完奖品库存后过滤,抽奖中拦截和无库存则走兜底)」 + StrategyAwardRuleModelVO strategyAwardRuleModelVO = repository.queryStrategyAwardRuleModelVO(strategyId, awardId); - // 4. 默认抽奖流程 - Integer awardId = strategyDispatch.getRandomAwardId(strategyId); + // 5. 抽奖中 - 规则过滤 + RuleActionEntity ruleActionCenterEntity = this.doCheckRaffleCenterLogic(RaffleFactorEntity.builder() + .userId(userId) + .strategyId(strategyId) + .awardId(awardId) + .build(), strategyAwardRuleModelVO.raffleCenterRuleModelList()); + + if (RuleLogicCheckTypeVO.TAKE_OVER.getCode().equals(ruleActionCenterEntity.getCode())){ + log.info("【临时日志】中奖中规则拦截,通过抽奖后规则 rule_luck_award 走兜底奖励。"); + return RaffleAwardEntity.builder() + .awardDesc("中奖中规则拦截,通过抽奖后规则 rule_luck_award 走兜底奖励。") + .build(); + } return RaffleAwardEntity.builder() .awardId(awardId) .build(); } - protected abstract RuleActionEntity doCheckRaffleBeforeLogic(RaffleFactorEntity raffleFactorEntity, String... logics); + + protected abstract RuleActionEntity doCheckRaffleCenterLogic(RaffleFactorEntity raffleFactorEntity, String... logics); } diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/IRaffleStrategy.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/IRaffleStrategy.java similarity index 91% rename from xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/IRaffleStrategy.java rename to xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/IRaffleStrategy.java index ff78c44fac14b6db769cf27be7c60911388be4c1..c59010ba9a73b7450ce3dde52062a558f941dfae 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/IRaffleStrategy.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/IRaffleStrategy.java @@ -1,4 +1,4 @@ -package cn.bugstack.domain.strategy.service; +package cn.bugstack.domain.strategy; import cn.bugstack.domain.strategy.model.entity.RaffleAwardEntity; diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RaffleFactorEntity.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RaffleFactorEntity.java index 4aac4301cfb7b3b74d9d7404c2f42128cc6a028c..800fa1926471f9201013af476da962f10c026101 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RaffleFactorEntity.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RaffleFactorEntity.java @@ -21,5 +21,8 @@ public class RaffleFactorEntity { private String userId; /** 策略ID */ private Long strategyId; + /** 奖品ID */ + private Integer awardId; + } diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RuleActionEntity.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RuleActionEntity.java index 8e40e95af63ba17e412c3cd412c40baf3215d778..ed48989603f3f438ae2512c33f7c61835f6e38c4 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RuleActionEntity.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/entity/RuleActionEntity.java @@ -48,12 +48,50 @@ public class RuleActionEntity { } // 抽奖之中 + + @EqualsAndHashCode(callSuper = true) + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor static public class RaffleCenterEntity extends RaffleEntity { + /** + * 策略ID + */ + private Long strategyId; + + /** + * 权重值Key;用于抽奖时可以选择权重抽奖。 + */ + private String ruleWeightValueKey; + /** + * 奖品ID; + */ + private Integer awardId; + } // 抽奖之后 + @EqualsAndHashCode(callSuper = true) + @Data + @Builder + @AllArgsConstructor + @NoArgsConstructor static public class RaffleAfterEntity extends RaffleEntity { + /** + * 策略ID + */ + private Long strategyId; + + /** + * 权重值Key;用于抽奖时可以选择权重抽奖。 + */ + private String ruleWeightValueKey; + /** + * 奖品ID; + */ + private Integer awardId; } diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/valobj/RuleLogicCheckTypeVO.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/valobj/RuleLogicCheckTypeVO.java index 7ec49c0c87bfe7dfb312f590d5b551178db261e2..e5bbecb3bf0b14e40d1377ce30ac93541689cc50 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/valobj/RuleLogicCheckTypeVO.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/valobj/RuleLogicCheckTypeVO.java @@ -1,7 +1,9 @@ package cn.bugstack.domain.strategy.model.valobj; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; +import lombok.NoArgsConstructor; /** * @ClassName: RuleLogicCheckTypeVO diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/valobj/StrategyAwardRuleModelVO.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/valobj/StrategyAwardRuleModelVO.java new file mode 100644 index 0000000000000000000000000000000000000000..f5f58909ac67252895712579890dd4e21e472c54 --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/model/valobj/StrategyAwardRuleModelVO.java @@ -0,0 +1,60 @@ +package cn.bugstack.domain.strategy.model.valobj; + +import cn.bugstack.domain.strategy.service.rule.chain.factory.DefaultChainFactory; +import cn.bugstack.domain.strategy.service.rule.filter.factory.DefaultLogicFactory; +import cn.bugstack.types.common.Constants; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName: StrategyAwardRuleModelVO + * @Description: + * @Author: zhaoyongfeng + * @Date: 2024/11/18 20:39 + */ +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class StrategyAwardRuleModelVO { + private String ruleModels; + + /** + * 获取抽奖中规则;或者使用 lambda 表达式 + *

+ * List ruleModelList = Arrays.stream(ruleModels.split(Constants.SPLIT)) + * .filter(DefaultLogicFactory.LogicModel::isCenter) + * .collect(Collectors.toList()); + * return ruleModelList; + *

+ * List collect = Arrays.stream(ruleModelValues).filter(DefaultLogicFactory.LogicModel::isCenter).collect(Collectors.toList()); + */ + public String[] raffleCenterRuleModelList() { + List ruleModelList = new ArrayList<>(); + String[] ruleModelValues = ruleModels.split(Constants.SPLIT); + for (String ruleModelValue : ruleModelValues) { + if (DefaultLogicFactory.LogicModel.isCenter(ruleModelValue)) { + ruleModelList.add(ruleModelValue); + } + } + return ruleModelList.toArray(new String[0]); + } + + public String[] raffleAfterRuleModelList() { + List ruleModelList = new ArrayList<>(); + String[] ruleModelValues = ruleModels.split(Constants.SPLIT); + for (String ruleModelValue : ruleModelValues) { + if (DefaultLogicFactory.LogicModel.isAfter(ruleModelValue)) { + ruleModelList.add(ruleModelValue); + } + } + return ruleModelList.toArray(new String[0]); + } + + +} diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/repository/IStrategyRepository.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/repository/IStrategyRepository.java index 8517af95f0459b4f075a0ba1cdcba2ea1a2cbcfa..879f0b891e8d0bfdaaa039094aeee5657f9595fb 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/repository/IStrategyRepository.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/repository/IStrategyRepository.java @@ -3,6 +3,7 @@ package cn.bugstack.domain.strategy.repository; import cn.bugstack.domain.strategy.model.entity.StrategyAwardEntity; import cn.bugstack.domain.strategy.model.entity.StrategyEntity; import cn.bugstack.domain.strategy.model.entity.StrategyRuleEntity; +import cn.bugstack.domain.strategy.model.valobj.StrategyAwardRuleModelVO; import java.util.List; import java.util.Map; @@ -11,7 +12,7 @@ public interface IStrategyRepository { List queryStrategyAwardList(Long strategyId); - void storeStrategyAwardSearchRateTable(String key, Integer rateRange, Map strategyAwardSearchRateTable); + void storeStrategyAwardSearchRateTable(String key, int rateRange, Map strategyAwardSearchRateTable); Integer getStrategyAwardAssemble(String key, Integer rateKey); @@ -24,6 +25,8 @@ public interface IStrategyRepository { StrategyRuleEntity queryStrategyRule(Long strategyId, String ruleModel); String queryStrategyRuleValue(Long strategyId, Integer awardId, String ruleModel); + String queryStrategyRuleValue(Long strategyId, String ruleModel); + StrategyAwardRuleModelVO queryStrategyAwardRuleModelVO(Long strategyId, Integer awardId); } diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/annotation/LogicStrategy.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/annotation/LogicStrategy.java index efb233caa262320bd9fff44b2f1c3b2818a0efa9..1b63b5a8af36ec72e9ce00e10005827eaf44506f 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/annotation/LogicStrategy.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/annotation/LogicStrategy.java @@ -1,6 +1,7 @@ package cn.bugstack.domain.strategy.service.annotation; -import cn.bugstack.domain.strategy.service.rule.factory.DefaultLogicFactory; +import cn.bugstack.domain.strategy.service.rule.chain.factory.DefaultChainFactory; +import cn.bugstack.domain.strategy.service.rule.filter.factory.DefaultLogicFactory; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; @@ -21,3 +22,4 @@ public @interface LogicStrategy { } + diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/raffle/DefaultRaffleStrategy.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/raffle/DefaultRaffleStrategy.java index 05c6c539ab2ed1b279e54c2967219c0d4de30dd3..8728682162a43fefcdae2b077ac4d2dbd5c000ae 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/raffle/DefaultRaffleStrategy.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/raffle/DefaultRaffleStrategy.java @@ -1,13 +1,15 @@ package cn.bugstack.domain.strategy.service.raffle; +import cn.bugstack.domain.strategy.AbstractRaffleStrategy; import cn.bugstack.domain.strategy.model.entity.RaffleFactorEntity; import cn.bugstack.domain.strategy.model.entity.RuleActionEntity; import cn.bugstack.domain.strategy.model.entity.RuleMatterEntity; import cn.bugstack.domain.strategy.model.valobj.RuleLogicCheckTypeVO; import cn.bugstack.domain.strategy.repository.IStrategyRepository; import cn.bugstack.domain.strategy.service.armory.IStrategyDispatch; -import cn.bugstack.domain.strategy.service.rule.ILogicFilter; -import cn.bugstack.domain.strategy.service.rule.factory.DefaultLogicFactory; +import cn.bugstack.domain.strategy.service.rule.filter.ILogicFilter; +import cn.bugstack.domain.strategy.service.rule.chain.factory.DefaultChainFactory; +import cn.bugstack.domain.strategy.service.rule.filter.factory.DefaultLogicFactory; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; @@ -31,54 +33,38 @@ public class DefaultRaffleStrategy extends AbstractRaffleStrategy { @Resource private DefaultLogicFactory logicFactory; - public DefaultRaffleStrategy(IStrategyRepository repository, IStrategyDispatch strategyDispatch) { - super(repository, strategyDispatch); - } - @Override - protected RuleActionEntity doCheckRaffleBeforeLogic(RaffleFactorEntity raffleFactorEntity, String... logics) { - Map> logicFilterGroup = logicFactory.openLogicFilter(); + public DefaultRaffleStrategy(IStrategyRepository repository, IStrategyDispatch strategyDispatch, DefaultChainFactory defaultChainFactory) { + super(repository, strategyDispatch, defaultChainFactory); + } - // 黑名单规则优先过滤 - String ruleBackList = Arrays.stream(logics) - .filter(str -> str.contains(DefaultLogicFactory.LogicModel.RULE_BLACKLIST.getCode())) - .findFirst() - .orElse(null); - if (StringUtils.isNotBlank(ruleBackList)) { - ILogicFilter logicFilter = logicFilterGroup.get(DefaultLogicFactory.LogicModel.RULE_BLACKLIST.getCode()); - RuleMatterEntity ruleMatterEntity = new RuleMatterEntity(); - ruleMatterEntity.setUserId(raffleFactorEntity.getUserId()); - ruleMatterEntity.setAwardId(ruleMatterEntity.getAwardId()); - ruleMatterEntity.setStrategyId(raffleFactorEntity.getStrategyId()); - ruleMatterEntity.setRuleModel(DefaultLogicFactory.LogicModel.RULE_BLACKLIST.getCode()); - RuleActionEntity ruleActionEntity = logicFilter.filter(ruleMatterEntity); - if (!RuleLogicCheckTypeVO.ALLOW.getCode().equals(ruleActionEntity.getCode())) { - return ruleActionEntity; - } - } + @Override + protected RuleActionEntity doCheckRaffleCenterLogic(RaffleFactorEntity raffleFactorEntity, String... logics) { + if (logics == null || 0 == logics.length) return RuleActionEntity.builder() + .code(RuleLogicCheckTypeVO.ALLOW.getCode()) + .info(RuleLogicCheckTypeVO.ALLOW.getInfo()) + .build(); - // 顺序过滤剩余规则 - List ruleList = Arrays.stream(logics) - .filter(s -> !s.equals(DefaultLogicFactory.LogicModel.RULE_BLACKLIST.getCode())) - .collect(Collectors.toList()); + Map> logicFilterGroup = logicFactory.openLogicFilter(); - RuleActionEntity ruleActionEntity = null; - for (String ruleModel : ruleList) { - ILogicFilter logicFilter = logicFilterGroup.get(ruleModel); + RuleActionEntity ruleActionEntity = null; + for (String ruleModel : logics) { + ILogicFilter logicFilter = logicFilterGroup.get(ruleModel); RuleMatterEntity ruleMatterEntity = new RuleMatterEntity(); ruleMatterEntity.setUserId(raffleFactorEntity.getUserId()); - ruleMatterEntity.setAwardId(ruleMatterEntity.getAwardId()); + ruleMatterEntity.setAwardId(raffleFactorEntity.getAwardId()); ruleMatterEntity.setStrategyId(raffleFactorEntity.getStrategyId()); ruleMatterEntity.setRuleModel(ruleModel); ruleActionEntity = logicFilter.filter(ruleMatterEntity); // 非放行结果则顺序过滤 - log.info("抽奖前规则过滤 userId: {} ruleModel: {} code: {} info: {}", raffleFactorEntity.getUserId(), ruleModel, ruleActionEntity.getCode(), ruleActionEntity.getInfo()); + log.info("抽奖中规则过滤 userId: {} ruleModel: {} code: {} info: {}", raffleFactorEntity.getUserId(), ruleModel, ruleActionEntity.getCode(), ruleActionEntity.getInfo()); if (!RuleLogicCheckTypeVO.ALLOW.getCode().equals(ruleActionEntity.getCode())) return ruleActionEntity; } - return ruleActionEntity; } + + } diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/AbstractLogicChain.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/AbstractLogicChain.java new file mode 100644 index 0000000000000000000000000000000000000000..f62d31a5a86a93fc533bd327c6cc9060682584df --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/AbstractLogicChain.java @@ -0,0 +1,30 @@ +package cn.bugstack.domain.strategy.service.rule.chain; + +import lombok.extern.slf4j.Slf4j; + +/** + * @ClassName: AbstractLogicChain + * @Description: 抽奖策略责任链,判断走那种抽奖策略。如;默认抽象、权重抽奖、黑名单抽奖 + * @Author: zhaoyongfeng + * @Date: 2024/11/18 22:03 + */ +@Slf4j +public abstract class AbstractLogicChain implements ILogicChain { + + private ILogicChain next; + + @Override + public ILogicChain next() { + return next; + } + + @Override + public ILogicChain appendNext(ILogicChain next) { + this.next = next; + return next; + } + + protected abstract String ruleModel(); + +} + diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/ILogicChain.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/ILogicChain.java new file mode 100644 index 0000000000000000000000000000000000000000..6e0c4f4e058207f863305eb6d60423438b7a9a79 --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/ILogicChain.java @@ -0,0 +1,21 @@ +package cn.bugstack.domain.strategy.service.rule.chain; +/* + * @return + * @author zhaoyongfeng + * @description 抽奖策略规则责任链接口 + * + * @param null + */ +public interface ILogicChain extends ILogicChainArmory{ + + /** + * 责任链接口 + * + * @param userId 用户ID + * @param strategyId 策略ID + * @return 奖品ID + */ + Integer logic(String userId, Long strategyId); + + +} diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/ILogicChainArmory.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/ILogicChainArmory.java new file mode 100644 index 0000000000000000000000000000000000000000..1c00fd75fe1eb41709d1128b7bdf6ec2e632a638 --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/ILogicChainArmory.java @@ -0,0 +1,12 @@ +package cn.bugstack.domain.strategy.service.rule.chain; +/* + * @return + * @author zhaoyongfeng + * @description 责任链装配 + * + * @param null + */ +public interface ILogicChainArmory { + ILogicChain next(); + ILogicChain appendNext(ILogicChain next); +} diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/factory/DefaultChainFactory.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/factory/DefaultChainFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..1ee1f930546ed1f1482f5d05edd4374aaa2679f0 --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/factory/DefaultChainFactory.java @@ -0,0 +1,54 @@ +package cn.bugstack.domain.strategy.service.rule.chain.factory; + +import cn.bugstack.domain.strategy.model.entity.StrategyEntity; +import cn.bugstack.domain.strategy.repository.IStrategyRepository; +import cn.bugstack.domain.strategy.service.rule.chain.ILogicChain; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * @ClassName: DefaultLogicFactory + * @Description: + * @Author: zhaoyongfeng + * @Date: 2024/11/17 16:05 + */ +@Service +public class DefaultChainFactory { + + private final Map logicChainGroup; + protected IStrategyRepository repository; + + public DefaultChainFactory(Map logicChainGroup, IStrategyRepository repository) { + this.logicChainGroup = logicChainGroup; + this.repository = repository; + } + + /** + * 通过策略ID,构建责任链 + * + * @param strategyId 策略ID + * @return LogicChain + */ + public ILogicChain openLogicChain(Long strategyId) { + StrategyEntity strategy = repository.queryStrategyEntityByStrategyId(strategyId); + String[] ruleModels = strategy.ruleModels(); + + // 如果未配置策略规则,则只装填一个默认责任链 + if (null == ruleModels || 0 == ruleModels.length) return logicChainGroup.get("default"); + + // 按照配置顺序装填用户配置的责任链;rule_blacklist、rule_weight 「注意此数据从Redis缓存中获取,如果更新库表,记得在测试阶段手动处理缓存」 + ILogicChain logicChain = logicChainGroup.get(ruleModels[0]); + ILogicChain current = logicChain; + for (int i = 1; i < ruleModels.length; i++) { + ILogicChain nextChain = logicChainGroup.get(ruleModels[i]); + current = current.appendNext(nextChain); + } + + // 责任链的最后装填默认责任链 + current.appendNext(logicChainGroup.get("default")); + + return logicChain; + } + +} diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/BackListLogicChain.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/BackListLogicChain.java new file mode 100644 index 0000000000000000000000000000000000000000..5d0b6cc16980a5628f8984e7d2e7b38849380dfa --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/BackListLogicChain.java @@ -0,0 +1,52 @@ +package cn.bugstack.domain.strategy.service.rule.chain.impl; + +import cn.bugstack.domain.strategy.repository.IStrategyRepository; +import cn.bugstack.domain.strategy.service.rule.chain.AbstractLogicChain; +import cn.bugstack.types.common.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @ClassName: RuleBackListLogicFilter + * @Description: 【抽奖前规则】黑名单用户过滤规则 + * @Author: zhaoyongfeng + * @Date: 2024/11/17 16:07 + */ +@Slf4j +@Component("rule_blacklist") +public class BackListLogicChain extends AbstractLogicChain { + @Resource + private IStrategyRepository repository; + + @Override + public Integer logic(String userId, Long strategyId) { + log.info("抽奖责任链-黑名单开始 userId: {} strategyId: {} ruleModel: {}", userId, strategyId, ruleModel()); + + // 查询规则值配置 + String ruleValue = repository.queryStrategyRuleValue(strategyId, ruleModel()); + String[] splitRuleValue = ruleValue.split(Constants.COLON); + Integer awardId = Integer.parseInt(splitRuleValue[0]); + + // 黑名单抽奖判断 + String[] userBlackIds = splitRuleValue[1].split(Constants.SPLIT); + for (String userBlackId : userBlackIds) { + if (userId.equals(userBlackId)) { + log.info("抽奖责任链-黑名单接管 userId: {} strategyId: {} ruleModel: {} awardId: {}", userId, strategyId, ruleModel(), awardId); + return awardId; + } + } + + // 过滤其他责任链 + log.info("抽奖责任链-黑名单放行 userId: {} strategyId: {} ruleModel: {}", userId, strategyId, ruleModel()); + return next().logic(userId, strategyId); + } + + @Override + protected String ruleModel() { + return "rule_blacklist"; + } + +} + diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/DefaultLogicChain.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/DefaultLogicChain.java new file mode 100644 index 0000000000000000000000000000000000000000..392936c3acab6c2a7581fe967ca6aa55e76ab1d3 --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/DefaultLogicChain.java @@ -0,0 +1,34 @@ +package cn.bugstack.domain.strategy.service.rule.chain.impl; + +import cn.bugstack.domain.strategy.service.armory.IStrategyDispatch; +import cn.bugstack.domain.strategy.service.rule.chain.AbstractLogicChain; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @ClassName: RuleLockLogicFilter + * @Description: + * @Author: zhaoyongfeng + * @Date: 2024/11/18 20:25 + */ +@Slf4j +@Component("default") +public class DefaultLogicChain extends AbstractLogicChain { + + @Resource + protected IStrategyDispatch strategyDispatch; + + @Override + public Integer logic(String userId, Long strategyId) { + Integer awardId = strategyDispatch.getRandomAwardId(strategyId); + log.info("抽奖责任链-默认处理 userId: {} strategyId: {} ruleModel: {} awardId: {}", userId, strategyId, ruleModel(), awardId); + return awardId; + } + + @Override + protected String ruleModel() { + return "default"; + } +} diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/RuleWeightLogicChain.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/RuleWeightLogicChain.java new file mode 100644 index 0000000000000000000000000000000000000000..bf64192851253a32e303b69fa194dcdf75620836 --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/chain/impl/RuleWeightLogicChain.java @@ -0,0 +1,109 @@ +package cn.bugstack.domain.strategy.service.rule.chain.impl; + +import cn.bugstack.domain.strategy.repository.IStrategyRepository; +import cn.bugstack.domain.strategy.service.armory.IStrategyDispatch; +import cn.bugstack.domain.strategy.service.rule.chain.AbstractLogicChain; +import cn.bugstack.types.common.Constants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.*; + +/** + * @ClassName: RuleWeightLogicFilter + * @Description: 【抽奖前规则】根据抽奖权重返回可抽奖范围KEY + * @Author: zhaoyongfeng + * @Date: 2024/11/17 16:08 + */ +@Slf4j +@Component("rule_weight") +public class RuleWeightLogicChain extends AbstractLogicChain { + + @Resource + private IStrategyRepository repository; + + public Long userScore = 4500L; + + @Resource + protected IStrategyDispatch strategyDispatch; + + // 根据用户ID查询用户抽奖消耗的积分值,本章节我们先写死为固定的值。后续需要从数据库中查询。 + + + /** + * 权重责任链过滤; + * 1. 权重规则格式;4000:102,103,104,105 5000:102,103,104,105,106,107 6000:102,103,104,105,106,107,108,109 + * 2. 解析数据格式;判断哪个范围符合用户的特定抽奖范围 + */ + @Override + public Integer logic(String userId, Long strategyId) { + log.info("抽奖责任链-权重开始 userId: {} strategyId: {} ruleModel: {}", userId, strategyId, ruleModel()); + + String ruleValue = repository.queryStrategyRuleValue(strategyId, ruleModel()); + + // 1. 根据用户ID查询用户抽奖消耗的积分值,本章节我们先写死为固定的值。后续需要从数据库中查询。 + Map analyticalValueGroup = getAnalyticalValue(ruleValue); + if (null == analyticalValueGroup || analyticalValueGroup.isEmpty()) return null; + + // 2. 转换Keys值,并默认排序 + List analyticalSortedKeys = new ArrayList<>(analyticalValueGroup.keySet()); + Collections.sort(analyticalSortedKeys); + + // 3. 找出最小符合的值,也就是【4500 积分,能找到 4000:102,103,104,105】、【5000 积分,能找到 5000:102,103,104,105,106,107】 + /* 找到最后一个符合的值[如用户传了一个 5900 应该返回正确结果为 5000],如果使用 Lambda findFirst 需要注意使用 sorted 反转结果 + * Long nextValue = null; + * for (Long analyticalSortedKeyValue : analyticalSortedKeys) { + * if (userScore >= analyticalSortedKeyValue){ + * nextValue = analyticalSortedKeyValue; + * } + * } + * + * Long nextValue = analyticalSortedKeys.stream() + * .filter(key -> userScore >= key) + * .max(Comparator.naturalOrder()) + * .orElse(null); + */ + Long nextValue = analyticalSortedKeys.stream() + .sorted(Comparator.reverseOrder()) + .filter(analyticalSortedKeyValue -> userScore >= analyticalSortedKeyValue) + .findFirst() + .orElse(null); + + // 4. 权重抽奖 + if (null != nextValue) { + Integer awardId = strategyDispatch.getRandomAwardId(strategyId, analyticalValueGroup.get(nextValue)); + log.info("抽奖责任链-权重接管 userId: {} strategyId: {} ruleModel: {} awardId: {}", userId, strategyId, ruleModel(), awardId); + return awardId; + } + + // 5. 过滤其他责任链 + log.info("抽奖责任链-权重放行 userId: {} strategyId: {} ruleModel: {}", userId, strategyId, ruleModel()); + return next().logic(userId, strategyId); + } + + @Override + protected String ruleModel() { + return "rule_weight"; + } + + private Map getAnalyticalValue(String ruleValue) { + String[] ruleValueGroups = ruleValue.split(Constants.SPACE); + Map ruleValueMap = new HashMap<>(); + for (String ruleValueKey : ruleValueGroups) { + // 检查输入是否为空 + if (ruleValueKey == null || ruleValueKey.isEmpty()) { + return ruleValueMap; + } + // 分割字符串以获取键和值 + String[] parts = ruleValueKey.split(Constants.COLON); + if (parts.length != 2) { + throw new IllegalArgumentException("rule_weight rule_rule invalid input format" + ruleValueKey); + } + ruleValueMap.put(Long.parseLong(parts[0]), ruleValueKey); + } + return ruleValueMap; + } + +} + + diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/ILogicFilter.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/ILogicFilter.java similarity index 86% rename from xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/ILogicFilter.java rename to xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/ILogicFilter.java index 741e4d55bca0a9462318ca298882f807a4d7ef3b..abc72485c022e4efe5a7389d61bc98adc73872c7 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/ILogicFilter.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/ILogicFilter.java @@ -1,4 +1,4 @@ -package cn.bugstack.domain.strategy.service.rule; +package cn.bugstack.domain.strategy.service.rule.filter; import cn.bugstack.domain.strategy.model.entity.RuleActionEntity; import cn.bugstack.domain.strategy.model.entity.RuleMatterEntity; diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/factory/DefaultLogicFactory.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/factory/DefaultLogicFactory.java similarity index 63% rename from xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/factory/DefaultLogicFactory.java rename to xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/factory/DefaultLogicFactory.java index cc674b85e6170cae1a010df6f59e1717aa02b602..dbe69ea510a41f6aa0c0d5ce22c01143601a7751 100644 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/factory/DefaultLogicFactory.java +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/factory/DefaultLogicFactory.java @@ -1,8 +1,8 @@ -package cn.bugstack.domain.strategy.service.rule.factory; +package cn.bugstack.domain.strategy.service.rule.filter.factory; import cn.bugstack.domain.strategy.model.entity.RuleActionEntity; import cn.bugstack.domain.strategy.service.annotation.LogicStrategy; -import cn.bugstack.domain.strategy.service.rule.ILogicFilter; +import cn.bugstack.domain.strategy.service.rule.filter.ILogicFilter; import lombok.AllArgsConstructor; import lombok.Getter; import org.springframework.core.annotation.AnnotationUtils; @@ -14,12 +14,13 @@ import java.util.concurrent.ConcurrentHashMap; /** * @ClassName: DefaultLogicFactory - * @Description: + * @Description: 规则工厂 * @Author: zhaoyongfeng - * @Date: 2024/11/17 16:05 + * @Date: 2024/11/18 22:27 */ @Service public class DefaultLogicFactory { + public Map> logicFilterMap = new ConcurrentHashMap<>(); public DefaultLogicFactory(List> logicFilters) { @@ -39,13 +40,21 @@ public class DefaultLogicFactory { @AllArgsConstructor public enum LogicModel { - RULE_WIGHT("rule_weight","【抽奖前规则】根据抽奖权重返回可抽奖范围KEY"), - RULE_BLACKLIST("rule_blacklist","【抽奖前规则】黑名单规则过滤,命中黑名单则直接返回"), - + RULE_LOCK("rule_lock", "【抽奖中规则】抽奖n次后,对应奖品可解锁抽奖", "center"), + RULE_LUCK_AWARD("rule_luck_award", "【抽奖后规则】抽奖n次后,对应奖品可解锁抽奖", "after"), ; private final String code; private final String info; + private final String type; + + public static boolean isCenter(String code){ + return "center".equals(LogicModel.valueOf(code.toUpperCase()).type); + } + + public static boolean isAfter(String code){ + return "after".equals(LogicModel.valueOf(code.toUpperCase()).type); + } } diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/impl/RuleLockLogicFilter.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/impl/RuleLockLogicFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..bbcbfa4e81c6326655738d40fcc037039b0c52cc --- /dev/null +++ b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/filter/impl/RuleLockLogicFilter.java @@ -0,0 +1,55 @@ +package cn.bugstack.domain.strategy.service.rule.filter.impl; + +import cn.bugstack.domain.strategy.model.entity.RuleActionEntity; +import cn.bugstack.domain.strategy.model.entity.RuleMatterEntity; +import cn.bugstack.domain.strategy.model.valobj.RuleLogicCheckTypeVO; +import cn.bugstack.domain.strategy.repository.IStrategyRepository; +import cn.bugstack.domain.strategy.service.annotation.LogicStrategy; +import cn.bugstack.domain.strategy.service.rule.filter.ILogicFilter; +import cn.bugstack.domain.strategy.service.rule.filter.factory.DefaultLogicFactory; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @ClassName: RuleLockLogicFilter + * @Description: 用户抽奖n次后,对应奖品可解锁抽奖 + * @Author: zhaoyongfeng + * @Date: 2024/11/18 22:27 + */ +@Slf4j +@Component +@LogicStrategy(logicMode = DefaultLogicFactory.LogicModel.RULE_LOCK) +public class RuleLockLogicFilter implements ILogicFilter { + @Resource + private IStrategyRepository repository; + + // 用户抽奖次数,后续完成这部分流程开发的时候,从数据库/Redis中读取 + private Long userRaffleCount = 0L; + + @Override + public RuleActionEntity filter(RuleMatterEntity ruleMatterEntity) { + log.info("规则过滤-次数锁 userId:{} strategyId:{} ruleModel:{}", ruleMatterEntity.getUserId(), ruleMatterEntity.getStrategyId(), ruleMatterEntity.getRuleModel()); + + // 查询规则值配置;当前奖品ID,抽奖中规则对应的校验值。如;1、2、6 + String ruleValue = repository.queryStrategyRuleValue(ruleMatterEntity.getStrategyId(), ruleMatterEntity.getAwardId(), ruleMatterEntity.getRuleModel()); + long raffleCount = Long.parseLong(ruleValue); + + // 用户抽奖次数大于规则限定值,规则放行 + if (userRaffleCount>= raffleCount) { + return RuleActionEntity.builder() + .code(RuleLogicCheckTypeVO.ALLOW.getCode()) + .info(RuleLogicCheckTypeVO.ALLOW.getInfo()) + .build(); + } + + // 用户抽奖次数小于规则限定值,规则拦截 + return RuleActionEntity.builder() + .code(RuleLogicCheckTypeVO.TAKE_OVER.getCode()) + .info(RuleLogicCheckTypeVO.TAKE_OVER.getInfo()) + .build(); + } + + +} diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/impl/RuleBackListLogicFilter.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/impl/RuleBackListLogicFilter.java deleted file mode 100644 index 803ef23aa42deb42e19b2054150a48d9302970a9..0000000000000000000000000000000000000000 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/impl/RuleBackListLogicFilter.java +++ /dev/null @@ -1,63 +0,0 @@ -package cn.bugstack.domain.strategy.service.rule.impl; - -import cn.bugstack.domain.strategy.model.entity.RuleActionEntity; -import cn.bugstack.domain.strategy.model.entity.RuleMatterEntity; -import cn.bugstack.domain.strategy.model.valobj.RuleLogicCheckTypeVO; -import cn.bugstack.domain.strategy.repository.IStrategyRepository; -import cn.bugstack.domain.strategy.service.annotation.LogicStrategy; -import cn.bugstack.domain.strategy.service.rule.ILogicFilter; -import cn.bugstack.domain.strategy.service.rule.factory.DefaultLogicFactory; -import cn.bugstack.types.common.Constants; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; - -/** - * @ClassName: RuleBackListLogicFilter - * @Description: 【抽奖前规则】黑名单用户过滤规则 - * @Author: zhaoyongfeng - * @Date: 2024/11/17 16:07 - */ -@Slf4j -@Component -@LogicStrategy(logicMode = DefaultLogicFactory.LogicModel.RULE_BLACKLIST) -public class RuleBackListLogicFilter implements ILogicFilter { - @Resource - private IStrategyRepository repository; - - @Override - public RuleActionEntity filter(RuleMatterEntity ruleMatterEntity) { - log.info("规则过滤-黑名单 userId:{} strategyId:{} ruleModel:{}", ruleMatterEntity.getUserId(), ruleMatterEntity.getStrategyId(), ruleMatterEntity.getRuleModel()); - - String userId = ruleMatterEntity.getUserId(); - - // 查询规则值配置 - String ruleValue = repository.queryStrategyRuleValue(ruleMatterEntity.getStrategyId(), ruleMatterEntity.getAwardId(), ruleMatterEntity.getRuleModel()); - String[] splitRuleValue = ruleValue.split(Constants.COLON); - Integer awardId = Integer.parseInt(splitRuleValue[0]); - - // 过滤其他规则 - String[] userBlackIds = splitRuleValue[1].split(Constants.SPLIT); - for (String userBlackId : userBlackIds) { - if (userId.equals(userBlackId)) { - return RuleActionEntity.builder() - .ruleModel(DefaultLogicFactory.LogicModel.RULE_BLACKLIST.getCode()) - .data(RuleActionEntity.RaffleBeforeEntity.builder() - .strategyId(ruleMatterEntity.getStrategyId()) - .awardId(awardId) - .build()) - .code(RuleLogicCheckTypeVO.TAKE_OVER.getCode()) - .info(RuleLogicCheckTypeVO.TAKE_OVER.getInfo()) - .build(); - } - } - - return RuleActionEntity.builder() - .code(RuleLogicCheckTypeVO.ALLOW.getCode()) - .info(RuleLogicCheckTypeVO.ALLOW.getInfo()) - .build(); - } - -} - diff --git a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/impl/RuleWeightLogicFilter.java b/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/impl/RuleWeightLogicFilter.java deleted file mode 100644 index 845a1136253d33c5e3b3f304c575589ab6f80949..0000000000000000000000000000000000000000 --- a/xfg-frame-archetype-lite-domain/src/main/java/cn/bugstack/domain/strategy/service/rule/impl/RuleWeightLogicFilter.java +++ /dev/null @@ -1,105 +0,0 @@ -package cn.bugstack.domain.strategy.service.rule.impl; - -import cn.bugstack.domain.strategy.model.entity.RuleActionEntity; -import cn.bugstack.domain.strategy.model.entity.RuleMatterEntity; -import cn.bugstack.domain.strategy.model.valobj.RuleLogicCheckTypeVO; -import cn.bugstack.domain.strategy.repository.IStrategyRepository; -import cn.bugstack.domain.strategy.service.annotation.LogicStrategy; -import cn.bugstack.domain.strategy.service.rule.ILogicFilter; -import cn.bugstack.domain.strategy.service.rule.factory.DefaultLogicFactory; -import cn.bugstack.types.common.Constants; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; -import javax.annotation.Resource; -import java.util.*; - -/** - * @ClassName: RuleWeightLogicFilter - * @Description: 【抽奖前规则】根据抽奖权重返回可抽奖范围KEY - * @Author: zhaoyongfeng - * @Date: 2024/11/17 16:08 - */ -@Slf4j -@Component -@LogicStrategy(logicMode = DefaultLogicFactory.LogicModel.RULE_WIGHT) -public class RuleWeightLogicFilter implements ILogicFilter { - - @Resource - private IStrategyRepository repository; - - public Long userScore = 4500L; - - /** - * 权重规则过滤; - * 1. 权重规则格式;4000:102,103,104,105 5000:102,103,104,105,106,107 6000:102,103,104,105,106,107,108,109 - * 2. 解析数据格式;判断哪个范围符合用户的特定抽奖范围 - * - * @param ruleMatterEntity 规则物料实体对象 - * @return 规则过滤结果 - */ - @Override - public RuleActionEntity filter(RuleMatterEntity ruleMatterEntity) { - log.info("规则过滤-权重范围 userId:{} strategyId:{} ruleModel:{}", ruleMatterEntity.getUserId(), ruleMatterEntity.getStrategyId(), ruleMatterEntity.getRuleModel()); - - String userId = ruleMatterEntity.getUserId(); - Long strategyId = ruleMatterEntity.getStrategyId(); - String ruleValue = repository.queryStrategyRuleValue(ruleMatterEntity.getStrategyId(), ruleMatterEntity.getAwardId(), ruleMatterEntity.getRuleModel()); - - // 1. 根据用户ID查询用户抽奖消耗的积分值,本章节我们先写死为固定的值。后续需要从数据库中查询。 - Map analyticalValueGroup = getAnalyticalValue(ruleValue); - if (null == analyticalValueGroup || analyticalValueGroup.isEmpty()) { - return RuleActionEntity.builder() - .code(RuleLogicCheckTypeVO.ALLOW.getCode()) - .info(RuleLogicCheckTypeVO.ALLOW.getInfo()) - .build(); - } - - // 2. 转换Keys值,并默认排序 - List analyticalSortedKeys = new ArrayList<>(analyticalValueGroup.keySet()); - Collections.sort(analyticalSortedKeys); - - // 3. 找出最小符合的值,也就是【4500 积分,能找到 4000:102,103,104,105】、【5000 积分,能找到 5000:102,103,104,105,106,107】 - Long nextValue = analyticalSortedKeys.stream() - .filter(key -> userScore >= key) - .findFirst() - .orElse(null); - - if (null != nextValue) { - return RuleActionEntity.builder() - .data(RuleActionEntity.RaffleBeforeEntity.builder() - .strategyId(strategyId) - .ruleWeightValueKey(analyticalValueGroup.get(nextValue)) - .build()) - .ruleModel(DefaultLogicFactory.LogicModel.RULE_WIGHT.getCode()) - .code(RuleLogicCheckTypeVO.TAKE_OVER.getCode()) - .info(RuleLogicCheckTypeVO.TAKE_OVER.getInfo()) - .build(); - } - - return RuleActionEntity.builder() - .code(RuleLogicCheckTypeVO.ALLOW.getCode()) - .info(RuleLogicCheckTypeVO.ALLOW.getInfo()) - .build(); - } - - private Map getAnalyticalValue(String ruleValue) { - String[] ruleValueGroups = ruleValue.split(Constants.SPACE); - Map ruleValueMap = new HashMap<>(); - for (String ruleValueKey : ruleValueGroups) { - // 检查输入是否为空 - if (ruleValueKey == null || ruleValueKey.isEmpty()) { - return ruleValueMap; - } - // 分割字符串以获取键和值 - String[] parts = ruleValueKey.split(Constants.COLON); - if (parts.length != 2) { - throw new IllegalArgumentException("rule_weight rule_rule invalid input format" + ruleValueKey); - } - ruleValueMap.put(Long.parseLong(parts[0]), ruleValueKey); - } - return ruleValueMap; - } - -} - - diff --git a/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/dao/IStrategyAwardDao.java b/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/dao/IStrategyAwardDao.java index fdac7c4e0af95a16cf81df748a1394159c0fb67e..e105a7feddf7da005e6afc162d6ed14d49e7a463 100644 --- a/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/dao/IStrategyAwardDao.java +++ b/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/dao/IStrategyAwardDao.java @@ -12,4 +12,5 @@ public interface IStrategyAwardDao { List queryStrategyAwardListByStrategyId(Long strategyId); + String queryStrategyAwardRuleModels(StrategyAward strategyAward); } diff --git a/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/po/Strategy.java b/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/po/Strategy.java index a76b4ef1e88cdb86730f58609568b9ef177c73be..b409a311a51467e77b3a7560838450c53f8d691a 100644 --- a/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/po/Strategy.java +++ b/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/po/Strategy.java @@ -1,7 +1,9 @@ package cn.bugstack.infrastructure.persistent.po; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.Date; @@ -12,6 +14,8 @@ import java.util.Date; * @Date: 2024/11/13 20:26 */ @Data +@AllArgsConstructor +@NoArgsConstructor @Builder public class Strategy { diff --git a/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/repository/StrategyRepository.java b/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/repository/StrategyRepository.java index 136f3e49a344e7a24a1e72867917ac34baffc490..94132aec879b7333cdc6faf222c6eac93c9f94f3 100644 --- a/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/repository/StrategyRepository.java +++ b/xfg-frame-archetype-lite-infrastructure/src/main/java/cn/bugstack/infrastructure/persistent/repository/StrategyRepository.java @@ -4,6 +4,7 @@ package cn.bugstack.infrastructure.persistent.repository; import cn.bugstack.domain.strategy.model.entity.StrategyAwardEntity; import cn.bugstack.domain.strategy.model.entity.StrategyEntity; import cn.bugstack.domain.strategy.model.entity.StrategyRuleEntity; +import cn.bugstack.domain.strategy.model.valobj.StrategyAwardRuleModelVO; import cn.bugstack.domain.strategy.repository.IStrategyRepository; import cn.bugstack.infrastructure.persistent.dao.IStrategyAwardDao; import cn.bugstack.infrastructure.persistent.dao.IStrategyDao; @@ -63,7 +64,7 @@ public class StrategyRepository implements IStrategyRepository { } @Override - public void storeStrategyAwardSearchRateTable(String key, Integer rateRange, Map strategyAwardSearchRateTable) { + public void storeStrategyAwardSearchRateTable(String key, int rateRange, Map strategyAwardSearchRateTable) { // 1. 存储抽奖策略范围值,如10000,用于生成1000以内的随机数 redisService.setValue(Constants.RedisKey.STRATEGY_RATE_RANGE_KEY + key, rateRange); // 2. 存储概率查找表 @@ -127,6 +128,22 @@ public class StrategyRepository implements IStrategyRepository { return strategyRuleDao.queryStrategyRuleValue(strategyRule); } + @Override + public String queryStrategyRuleValue(Long strategyId, String ruleModel) { + return queryStrategyRuleValue(strategyId, null, ruleModel); + } + + + @Override + public StrategyAwardRuleModelVO queryStrategyAwardRuleModelVO(Long strategyId, Integer awardId) { + StrategyAward strategyAward = new StrategyAward(); + strategyAward.setStrategyId(strategyId); + strategyAward.setAwardId(awardId); + String ruleModels = strategyAwardDao.queryStrategyAwardRuleModels(strategyAward); + return StrategyAwardRuleModelVO.builder().ruleModels(ruleModels).build(); + + } + }