diff --git a/alerter/src/main/java/com/usthe/alert/config/AlerterAutoConfiguration.java b/alerter/src/main/java/com/usthe/alert/config/AlerterAutoConfiguration.java new file mode 100644 index 00000000000..2f0951f0de3 --- /dev/null +++ b/alerter/src/main/java/com/usthe/alert/config/AlerterAutoConfiguration.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.usthe.alert.config; + +import org.springframework.context.annotation.ComponentScan; + +/** + * @author gcdd1993 + * @version 2.1 + * Created by Musk.Chen on 2023/1/14 + */ +@ComponentScan(basePackages = "com.usthe.alert") +public class AlerterAutoConfiguration { +} diff --git a/alerter/src/main/resources/META-INF/spring.factories b/alerter/src/main/resources/META-INF/spring.factories index 6140e02a085..fde2583a99e 100644 --- a/alerter/src/main/resources/META-INF/spring.factories +++ b/alerter/src/main/resources/META-INF/spring.factories @@ -14,11 +14,4 @@ # limitations under the License. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.usthe.alert.service.impl.AlertDefineServiceImpl,\ -com.usthe.alert.service.impl.AlertServiceImpl,\ -com.usthe.alert.controller.AlertDefineController,\ -com.usthe.alert.AlerterWorkerPool,\ -com.usthe.alert.AlerterProperties,\ -com.usthe.alert.calculate.CalculateAlarm,\ -com.usthe.alert.controller.AlertsController,\ -com.usthe.alert.controller.AlertDefinesController \ No newline at end of file +com.usthe.alert.config.AlerterAutoConfiguration \ No newline at end of file diff --git a/collector/src/main/java/com/usthe/collector/config/CollectorAutoConfiguration.java b/collector/src/main/java/com/usthe/collector/config/CollectorAutoConfiguration.java new file mode 100644 index 00000000000..1387e112a30 --- /dev/null +++ b/collector/src/main/java/com/usthe/collector/config/CollectorAutoConfiguration.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.usthe.collector.config; + +import org.springframework.context.annotation.ComponentScan; + +/** + * @author gcdd1993 + * @version 2.1 + * Created by Musk.Chen on 2023/1/14 + */ +@ComponentScan(basePackages = "com.usthe.collector") +public class CollectorAutoConfiguration { +} diff --git a/collector/src/main/resources/META-INF/spring.factories b/collector/src/main/resources/META-INF/spring.factories index 6112a5a5099..07edad56331 100644 --- a/collector/src/main/resources/META-INF/spring.factories +++ b/collector/src/main/resources/META-INF/spring.factories @@ -14,14 +14,5 @@ # limitations under the License. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.usthe.collector.dispatch.timer.TimerDispatcher,\ -com.usthe.collector.dispatch.CommonDispatcher,\ -com.usthe.collector.dispatch.DispatchProperties,\ -com.usthe.collector.dispatch.MetricsCollectorQueue,\ -com.usthe.collector.dispatch.WorkerPool,\ -com.usthe.collector.dispatch.entrance.internal.CollectJobService,\ -com.usthe.collector.collect.database.JdbcSpiLoader,\ -com.usthe.collector.collect.http.promethus.PrometheusParseCreater,\ -com.usthe.collector.dispatch.unit.impl.DataSizeConvert,\ -com.usthe.collector.collect.strategy.CollectStrategyFactory +com.usthe.collector.config.CollectorAutoConfiguration diff --git a/common/src/main/java/com/usthe/common/config/CommonConfig.java b/common/src/main/java/com/usthe/common/config/CommonConfig.java index a116465a7cd..632c8cec703 100644 --- a/common/src/main/java/com/usthe/common/config/CommonConfig.java +++ b/common/src/main/java/com/usthe/common/config/CommonConfig.java @@ -18,12 +18,16 @@ package com.usthe.common.config; import com.usthe.common.util.AesUtil; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * @author tom * @date 2022/6/30 09:23 */ +@ComponentScan(basePackages = "com.usthe.common") +@EnableConfigurationProperties(CommonProperties.class) @Configuration public class CommonConfig { diff --git a/common/src/main/java/com/usthe/common/config/CommonProperties.java b/common/src/main/java/com/usthe/common/config/CommonProperties.java index 5e1806fa11a..2cdd5f6c9e3 100644 --- a/common/src/main/java/com/usthe/common/config/CommonProperties.java +++ b/common/src/main/java/com/usthe/common/config/CommonProperties.java @@ -18,7 +18,6 @@ package com.usthe.common.config; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; /** * common properties @@ -26,7 +25,6 @@ * @author tom * @date 2021/11/24 10:38 */ -@Component @ConfigurationProperties(prefix = "common") public class CommonProperties { diff --git a/common/src/main/java/com/usthe/common/service/TencentSmsClient.java b/common/src/main/java/com/usthe/common/service/TencentSmsClient.java index 22cd5e20eac..b3731fd02b6 100644 --- a/common/src/main/java/com/usthe/common/service/TencentSmsClient.java +++ b/common/src/main/java/com/usthe/common/service/TencentSmsClient.java @@ -9,14 +9,14 @@ import com.usthe.common.support.exception.SendMessageException; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; /** * sms service client for tencent cloud * @author tom * @date 2022/12/17 17:41 */ -@Configuration +@Component @ConditionalOnProperty("common.sms.tencent.app-id") @Slf4j public class TencentSmsClient { diff --git a/common/src/main/resources/META-INF/spring.factories b/common/src/main/resources/META-INF/spring.factories index 56c165da254..3672b3602cf 100644 --- a/common/src/main/resources/META-INF/spring.factories +++ b/common/src/main/resources/META-INF/spring.factories @@ -15,9 +15,4 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.usthe.common.config.CommonProperties,\ -com.usthe.common.config.CommonConfig,\ -com.usthe.common.config.AviatorConfiguration,\ -com.usthe.common.queue.impl.InMemoryCommonDataQueue,\ -com.usthe.common.service.TencentSmsClient,\ -com.usthe.common.support.SpringContextHolder +com.usthe.common.config.CommonConfig diff --git a/manager/src/test/java/com/usthe/manager/ManagerTest.java b/manager/src/test/java/com/usthe/manager/ManagerTest.java new file mode 100644 index 00000000000..95c17f9daba --- /dev/null +++ b/manager/src/test/java/com/usthe/manager/ManagerTest.java @@ -0,0 +1,99 @@ +package com.usthe.manager; + +import com.usthe.alert.AlerterProperties; +import com.usthe.alert.AlerterWorkerPool; +import com.usthe.alert.calculate.CalculateAlarm; +import com.usthe.alert.controller.AlertDefineController; +import com.usthe.alert.controller.AlertDefinesController; +import com.usthe.alert.controller.AlertsController; +import com.usthe.alert.service.impl.AlertDefineServiceImpl; +import com.usthe.alert.service.impl.AlertServiceImpl; +import com.usthe.collector.collect.database.JdbcSpiLoader; +import com.usthe.collector.collect.http.promethus.PrometheusParseCreater; +import com.usthe.collector.collect.strategy.CollectStrategyFactory; +import com.usthe.collector.dispatch.CommonDispatcher; +import com.usthe.collector.dispatch.DispatchProperties; +import com.usthe.collector.dispatch.MetricsCollectorQueue; +import com.usthe.collector.dispatch.WorkerPool; +import com.usthe.collector.dispatch.entrance.internal.CollectJobService; +import com.usthe.collector.dispatch.timer.TimerDispatcher; +import com.usthe.collector.dispatch.unit.impl.DataSizeConvert; +import com.usthe.common.config.AviatorConfiguration; +import com.usthe.common.config.CommonConfig; +import com.usthe.common.config.CommonProperties; +import com.usthe.common.queue.impl.InMemoryCommonDataQueue; +import com.usthe.common.service.TencentSmsClient; +import com.usthe.common.support.SpringContextHolder; +import com.usthe.warehouse.WarehouseWorkerPool; +import com.usthe.warehouse.config.WarehouseProperties; +import com.usthe.warehouse.controller.MetricsDataController; +import com.usthe.warehouse.store.HistoryIotDbDataStorage; +import com.usthe.warehouse.store.HistoryTdEngineDataStorage; +import com.usthe.warehouse.store.RealTimeMemoryDataStorage; +import com.usthe.warehouse.store.RealTimeRedisDataStorage; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.context.ApplicationContext; + +import javax.annotation.Resource; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +/** + * @author gcdd1993 + * @version 2.1 + * Created by Musk.Chen on 2023/1/14 + */ +class ManagerTest extends AbstractSpringIntegrationTest { + + @Resource + private ApplicationContext ctx; + + @Test + void testAutoImport() { + // test alert module + assertNotNull(ctx.getBean(AlertDefineServiceImpl.class)); + assertNotNull(ctx.getBean(AlertServiceImpl.class)); + assertNotNull(ctx.getBean(AlertDefineController.class)); + assertNotNull(ctx.getBean(AlerterWorkerPool.class)); + assertNotNull(ctx.getBean(AlerterProperties.class)); + assertNotNull(ctx.getBean(CalculateAlarm.class)); + assertNotNull(ctx.getBean(AlertsController.class)); + assertNotNull(ctx.getBean(AlertDefinesController.class)); + + // test collector module + assertNotNull(ctx.getBean(TimerDispatcher.class)); + assertNotNull(ctx.getBean(CommonDispatcher.class)); + assertNotNull(ctx.getBean(DispatchProperties.class)); + assertNotNull(ctx.getBean(MetricsCollectorQueue.class)); + assertNotNull(ctx.getBean(WorkerPool.class)); + assertNotNull(ctx.getBean(CollectJobService.class)); + assertNotNull(ctx.getBean(JdbcSpiLoader.class)); + assertNotNull(ctx.getBean(PrometheusParseCreater.class)); + assertNotNull(ctx.getBean(DataSizeConvert.class)); + assertNotNull(ctx.getBean(CollectStrategyFactory.class)); + + // test common module + assertNotNull(ctx.getBean(CommonProperties.class)); + assertNotNull(ctx.getBean(CommonConfig.class)); + assertNotNull(ctx.getBean(AviatorConfiguration.class)); + assertNotNull(ctx.getBean(InMemoryCommonDataQueue.class)); + // condition on common.sms.tencent.app-id + assertThrows(NoSuchBeanDefinitionException.class, () -> ctx.getBean(TencentSmsClient.class)); + assertNotNull(ctx.getBean(SpringContextHolder.class)); + + // test warehouse module + assertNotNull(ctx.getBean(WarehouseProperties.class)); + assertNotNull(ctx.getBean(WarehouseWorkerPool.class)); + + // default DataStorage is RealTimeMemoryDataStorage + assertNotNull(ctx.getBean(RealTimeMemoryDataStorage.class)); + assertThrows(NoSuchBeanDefinitionException.class, () -> ctx.getBean(RealTimeRedisDataStorage.class)); + assertThrows(NoSuchBeanDefinitionException.class, () -> ctx.getBean(HistoryTdEngineDataStorage.class)); + assertThrows(NoSuchBeanDefinitionException.class, () -> ctx.getBean(HistoryIotDbDataStorage.class)); + + assertNotNull(ctx.getBean(MetricsDataController.class)); + } + +} \ No newline at end of file diff --git a/warehouse/src/main/java/com/usthe/warehouse/config/WarehouseAutoConfiguration.java b/warehouse/src/main/java/com/usthe/warehouse/config/WarehouseAutoConfiguration.java new file mode 100644 index 00000000000..0c8c3bf5682 --- /dev/null +++ b/warehouse/src/main/java/com/usthe/warehouse/config/WarehouseAutoConfiguration.java @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.usthe.warehouse.config; + +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.ComponentScan; + +/** + * @author gcdd1993 + * @version 2.1 + * Created by Musk.Chen on 2023/1/14 + */ +@ComponentScan(basePackages = "com.usthe.warehouse") +@EnableConfigurationProperties(WarehouseProperties.class) +public class WarehouseAutoConfiguration { +} diff --git a/warehouse/src/main/java/com/usthe/warehouse/WarehouseProperties.java b/warehouse/src/main/java/com/usthe/warehouse/config/WarehouseProperties.java similarity index 99% rename from warehouse/src/main/java/com/usthe/warehouse/WarehouseProperties.java rename to warehouse/src/main/java/com/usthe/warehouse/config/WarehouseProperties.java index 919ff2fad41..cca0bf2af5a 100644 --- a/warehouse/src/main/java/com/usthe/warehouse/WarehouseProperties.java +++ b/warehouse/src/main/java/com/usthe/warehouse/config/WarehouseProperties.java @@ -15,11 +15,10 @@ * limitations under the License. */ -package com.usthe.warehouse; +package com.usthe.warehouse.config; import org.apache.iotdb.session.util.Version; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; import java.time.ZoneId; import java.util.List; @@ -29,7 +28,6 @@ * @author tom * @date 2021/11/24 10:38 */ -@Component @ConfigurationProperties(prefix = "warehouse") public class WarehouseProperties { diff --git a/warehouse/src/main/java/com/usthe/warehouse/store/AbstractHistoryDataStorage.java b/warehouse/src/main/java/com/usthe/warehouse/store/AbstractHistoryDataStorage.java index 6f7507bd415..5289413434b 100644 --- a/warehouse/src/main/java/com/usthe/warehouse/store/AbstractHistoryDataStorage.java +++ b/warehouse/src/main/java/com/usthe/warehouse/store/AbstractHistoryDataStorage.java @@ -3,7 +3,7 @@ import com.usthe.common.entity.dto.Value; import com.usthe.common.entity.message.CollectRep; import com.usthe.common.queue.CommonDataQueue; -import com.usthe.warehouse.WarehouseProperties; +import com.usthe.warehouse.config.WarehouseProperties; import com.usthe.warehouse.WarehouseWorkerPool; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; diff --git a/warehouse/src/main/java/com/usthe/warehouse/store/HistoryIotDbDataStorage.java b/warehouse/src/main/java/com/usthe/warehouse/store/HistoryIotDbDataStorage.java index 7bfaba6a1fd..2f7f70dc57b 100644 --- a/warehouse/src/main/java/com/usthe/warehouse/store/HistoryIotDbDataStorage.java +++ b/warehouse/src/main/java/com/usthe/warehouse/store/HistoryIotDbDataStorage.java @@ -4,8 +4,8 @@ import com.usthe.common.entity.message.CollectRep; import com.usthe.common.queue.CommonDataQueue; import com.usthe.common.util.CommonConstants; -import com.usthe.warehouse.WarehouseProperties; import com.usthe.warehouse.WarehouseWorkerPool; +import com.usthe.warehouse.config.WarehouseProperties; import lombok.extern.slf4j.Slf4j; import org.apache.iotdb.rpc.IoTDBConnectionException; import org.apache.iotdb.rpc.StatementExecutionException; @@ -16,9 +16,8 @@ import org.apache.iotdb.tsfile.read.common.RowRecord; import org.apache.iotdb.tsfile.write.record.Tablet; import org.apache.iotdb.tsfile.write.schema.MeasurementSchema; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.math.RoundingMode; @@ -30,8 +29,7 @@ * @author ceilzcx * @since 2022/10/12 */ -@Configuration -@AutoConfigureAfter(value = {WarehouseProperties.class}) +@Component @ConditionalOnProperty(prefix = "warehouse.store.iot-db", name = "enabled", havingValue = "true") @Slf4j diff --git a/warehouse/src/main/java/com/usthe/warehouse/store/HistoryTdEngineDataStorage.java b/warehouse/src/main/java/com/usthe/warehouse/store/HistoryTdEngineDataStorage.java index afbf9fc0c90..9ebab7c0968 100644 --- a/warehouse/src/main/java/com/usthe/warehouse/store/HistoryTdEngineDataStorage.java +++ b/warehouse/src/main/java/com/usthe/warehouse/store/HistoryTdEngineDataStorage.java @@ -21,15 +21,14 @@ import com.usthe.common.entity.message.CollectRep; import com.usthe.common.queue.CommonDataQueue; import com.usthe.common.util.CommonConstants; -import com.usthe.warehouse.WarehouseProperties; import com.usthe.warehouse.WarehouseWorkerPool; +import com.usthe.warehouse.config.WarehouseProperties; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.math.RoundingMode; @@ -47,10 +46,9 @@ * @date 2021/11/24 18:23 */ @Primary -@Configuration -@AutoConfigureAfter(value = {WarehouseProperties.class}) +@Component @ConditionalOnProperty(prefix = "warehouse.store.td-engine", - name = "enabled", havingValue = "true", matchIfMissing = false) + name = "enabled", havingValue = "true") @Slf4j public class HistoryTdEngineDataStorage extends AbstractHistoryDataStorage { diff --git a/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeMemoryDataStorage.java b/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeMemoryDataStorage.java index 3839e360a29..79fba811187 100644 --- a/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeMemoryDataStorage.java +++ b/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeMemoryDataStorage.java @@ -19,14 +19,12 @@ import com.usthe.common.entity.message.CollectRep; import com.usthe.common.queue.CommonDataQueue; -import com.usthe.warehouse.WarehouseProperties; import com.usthe.warehouse.WarehouseWorkerPool; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.lang.NonNull; +import org.springframework.stereotype.Component; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -37,8 +35,7 @@ * @date 2021/11/25 10:26 */ @Primary -@Configuration -@AutoConfigureAfter(value = {WarehouseProperties.class}) +@Component @ConditionalOnProperty(prefix = "warehouse.store.memory", name = "enabled", havingValue = "true", matchIfMissing = true) @Slf4j diff --git a/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeRedisDataStorage.java b/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeRedisDataStorage.java index a1b75f1f842..ebb45317b38 100644 --- a/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeRedisDataStorage.java +++ b/warehouse/src/main/java/com/usthe/warehouse/store/RealTimeRedisDataStorage.java @@ -19,18 +19,17 @@ import com.usthe.common.entity.message.CollectRep; import com.usthe.common.queue.CommonDataQueue; -import com.usthe.warehouse.WarehouseProperties; import com.usthe.warehouse.WarehouseWorkerPool; +import com.usthe.warehouse.config.WarehouseProperties; import io.lettuce.core.RedisClient; import io.lettuce.core.RedisURI; import io.lettuce.core.api.StatefulRedisConnection; import io.lettuce.core.api.async.RedisAsyncCommands; import io.lettuce.core.api.sync.RedisCommands; import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.context.annotation.Configuration; import org.springframework.lang.NonNull; +import org.springframework.stereotype.Component; import java.time.Duration; import java.time.temporal.ChronoUnit; @@ -40,10 +39,9 @@ * @author tom * @date 2021/11/25 10:26 */ -@Configuration -@AutoConfigureAfter(value = {WarehouseProperties.class}) +@Component @ConditionalOnProperty(prefix = "warehouse.store.redis", - name = "enabled", havingValue = "true", matchIfMissing = false) + name = "enabled", havingValue = "true") @Slf4j public class RealTimeRedisDataStorage extends AbstractRealTimeDataStorage { diff --git a/warehouse/src/main/resources/META-INF/spring.factories b/warehouse/src/main/resources/META-INF/spring.factories index 8c98d583a72..737cb27d74e 100644 --- a/warehouse/src/main/resources/META-INF/spring.factories +++ b/warehouse/src/main/resources/META-INF/spring.factories @@ -14,10 +14,4 @@ # limitations under the License. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.usthe.warehouse.WarehouseProperties,\ -com.usthe.warehouse.WarehouseWorkerPool,\ -com.usthe.warehouse.store.RealTimeMemoryDataStorage,\ -com.usthe.warehouse.store.RealTimeRedisDataStorage,\ -com.usthe.warehouse.store.HistoryTdEngineDataStorage,\ -com.usthe.warehouse.store.HistoryIotDbDataStorage,\ -com.usthe.warehouse.controller.MetricsDataController \ No newline at end of file +com.usthe.warehouse.config.WarehouseAutoConfiguration \ No newline at end of file