diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
deleted file mode 100644
index bff7098..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/HibernateConfig.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.supwisdom.dlpay.framework.tenant;
-
-import java.util.HashMap;
-import java.util.Map;
-import javax.sql.DataSource;
-
-import lombok.extern.slf4j.Slf4j;
-import org.hibernate.MultiTenancyStrategy;
-import org.hibernate.cfg.Environment;
-import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
-import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
-import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
-import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.orm.jpa.JpaVendorAdapter;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
-
-
-@Configuration
-@Slf4j
-public class HibernateConfig {
-
-  private final JpaProperties jpaProperties;
-
-  private final HibernateProperties hibernateProperties;
-
-  public HibernateConfig(@Autowired JpaProperties jpaProperties,
-                         HibernateProperties hibernateProperties) {
-    this.jpaProperties = jpaProperties;
-    this.hibernateProperties = hibernateProperties;
-  }
-
-  @Bean
-  public JpaVendorAdapter getJpaVendorAdapter() {
-    HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
-    adapter.setGenerateDdl(true);
-    return adapter;
-  }
-
-  @Bean("entityManagerFactory")
-  public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(DataSource dataSource,
-                                                                         MultiTenantConnectionProvider multiTenantConnectionProvider,
-                                                                         CurrentTenantIdentifierResolver currentTenantIdentifierResolver) {
-    Map<String, Object> properties = new HashMap<>();
-    properties.putAll(hibernateProperties
-        .determineHibernateProperties(jpaProperties.getProperties(),
-            new HibernateSettings()));
-    properties.put(Environment.MULTI_TENANT, MultiTenancyStrategy.SCHEMA);
-    properties.put(Environment.MULTI_TENANT_CONNECTION_PROVIDER, multiTenantConnectionProvider);
-    properties.put(Environment.MULTI_TENANT_IDENTIFIER_RESOLVER, currentTenantIdentifierResolver);
-
-    LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
-    em.setDataSource(dataSource);
-    em.setPackagesToScan("com.supwisdom");
-    em.setJpaPropertyMap(properties);
-    em.setJpaVendorAdapter(getJpaVendorAdapter());
-    log.info("setup multi-tenant entityManagerFactor");
-    return em;
-  }
-
-}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt
index b874abc..efd45f7 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/kafka_service.kt
@@ -13,15 +13,18 @@
 
     fun sendNoticeMessage(noticeMsgid: String)
 }
+
 @Component
-class  KafkaMsgListener{
+class KafkaMsgListener {
     val logger = KotlinLogging.logger { }
     @Autowired
     private lateinit var msgDao: MsgDao
     @Autowired
     private lateinit var noticeMsgDao: NoticeMsgDao
 
-    @KafkaListener(topics = ["jpush-messages-result"],autoStartup = "\${spring.kafka.listen.auto.start:true}")
+    @KafkaListener(topics = ["jpush-messages-result"],
+            autoStartup = "\${spring.kafka.listen.auto.start:true}",
+            groupId = "0")
     fun listen(record: ConsumerRecord<String, String>) {
         logger.debug { "${record.key()},${record.value()}" }
         if (!record.key().isNullOrEmpty()) {
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index 2c5c6a0..091b5cf 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -40,4 +40,5 @@
 # user password
 auth.password.bcrypt.length=10
 ###################################################
-spring.redis.database=0
\ No newline at end of file
+spring.redis.database=0
+multi-tenant.datasource.base-package=com.supwisdom.dlpay
\ No newline at end of file
