tuya-spring-boot-starter helps you efficiently create cloud development projects regarding the OpenAPI or message subscription capabilities. You can put all the focus on business logic without taking care of server-side programming nor relational databases.

Overview

English | 中文版

License: Apache 2 Version: 1.0.0

tuya-spring-boot-starter helps you efficiently create cloud development projects regarding the OpenAPI or message subscription capabilities. You can put all the focus on business logic without taking care of server-side programming nor relational databases.

Quick start

Integrate Spring Boot

Dependency

<dependency>
  <groupId>com.tuya</groupId>
  <artifactId>tuya-spring-boot-starter</artifactId>
  <version>#{latest.version}</version>
</dependency>

<!-- Specify the Maven repository URL -->
<repository>
    <id>tuya-maven</id>
    <url>https://maven-other.tuya.com/repository/maven-public/</url>
</repository>

Configuration

# ClientId & SecretKey generated on the Tuya Cloud Development Platform
connector.ak=***
connector.sk=***

Usage

Call OpenAPI operations
  1. Create the Connector interface, which is the mapping class of OpenAPI.
public interface DeviceConnector {
    /**
     * query device info by device_id
     * @param deviceId
     * @return
     */
    @GET("/v1.0/devices/{device_id}")
    Device getById(@Path("device_id") String deviceId);
}
  1. Set @ConnectorScan for the class of the Spring Boot application. You can set @EnableMessaging to enable the message subscription capability.
@ConnectorScan(basePackages = "com.xxx.connectors")
@EnableMessaging
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
  1. The Connector interface will be scanned and injected into the Spring container.
@Service
public class DeviceService {
    @Autowired
    private DeviceConnector device;

    public Device getById(String deviceId) {
        return device.getById(deviceId);
    }
}
Subscribe to message events
/**
 * device status data report event
 */
@EventListener
public void statusReportMessage(StatusReportMessage event) {
    log.info("### StatusReport event happened, eventInfo: {}", event);
}

How it works: implement extensions based on the connector framework.

Extension points of OpenAPI

  • ErrorProcessor

You can define the implementation class of ErrorProcessor to handle different error responses. For example, if a token expires, it can be automatically refreshed. The API operation will be tried again with the refreshed token. TokenInvalidErrorProcessor is the built-in implementation class of ErrorProcessor.

The extended ErrorProcessor must be injected into the Spring container to take effect.

  • ContextManager

The connector framework supports TuyaContextManager on which the automatic token refreshing depends. TuyaContextManager can prepare the context before API operations, and manage information including data source connection, tokens, and multilingual text.

  • TokenManager

TuyaTokenManager is the default token management mechanism and implements the TokenManager interface in the connector framework. The token information is cached on the premises.

To manage the token on the premises, you can extend TokenManager and inject it into the Spring container.

  • HeaderProcessor

TuyaHeaderProcessor implements the processing logic of the header for OpenAPI operations, including the required attribute values and signatures.

Extension points of messages

  • MessageDispatcher

TuyaMessageDispatcher implements MessageDispatcher interface for message dispatching in the connector framework. The dispatcher features message ordering and data decryption. It allows you to create specific message types and publish messages based on Spring's event mechanism.

  • MessageEvent

You can add ApplicationListener to listen for required events. The connector framework includes all the Tuya's message event types. The message data contains ciphertext messages and plaintext messages.

Message event BizCode Description
StatusReportMessage statusReport Report data to the cloud.
OnlineMessage online A device is online.
OfflineMessage offline A device is offline.
NameUpdateMessage nameUpdate Modify the device name.
DpNameUpdateMessage dpNameUpdate Modify the name of a data point.
DeleteMessage delete Remove a device.
BindUserMessage bindUser Bind the device to a user account.
UpgradeStatusMessage upgradeStatus The update status.
AutomationExternalActionMessage automationExternalAction Automate an external action.
SceneExecuteMessage sceneExecute Execute a scene.
Comments
  • com.tuya.connector.api.exceptions.ConnectorDelegateException: Error create retrofit delegate for connector :

    com.tuya.connector.api.exceptions.ConnectorDelegateException: Error create retrofit delegate for connector :

    我遇到这个问题,不知如何处理,可能是与项目框架包冲突? com.tuya.connector.api.exceptions.ConnectorDelegateException: Error create retrofit delegate for connector : cn.ac.xxx.admin.connector.HomeConnector. Cause: javassist.bytecode.DuplicateMemberException: duplicate method: queryGroup in cn.ac.xxx.admin.connector.$HomeConnector

    opened by rayxie2046 12
  • Can't connect: Received unknown request id from server: -1

    Can't connect: Received unknown request id from server: -1

    I'm getting this using the spring boot sample project (based on 1.1.1 or 1.1.0):

    
    2021-12-08 20:47:01.577  INFO 23344 --- [r-client-io-1-1] o.a.pulsar.client.impl.ConnectionPool    : [[id: 0x00a610cb, L:/192.168.0.214:61818 - R:mqe.tuyaeu.com/3.120.66.229:7285]] Connected to server
    2021-12-08 20:47:01.665  WARN 23344 --- [r-client-io-1-1] org.apache.pulsar.client.impl.ClientCnx  : [id: 0x00a610cb, L:/192.168.0.214:61818 - R:mqe.tuyaeu.com/3.120.66.229:7285] Received error from server: Failed to authenticate
    2021-12-08 20:47:01.665  WARN 23344 --- [r-client-io-1-1] org.apache.pulsar.client.impl.ClientCnx  : [id: 0x00a610cb, L:/192.168.0.214:61818 - R:mqe.tuyaeu.com/3.120.66.229:7285] Received unknown request id from server: -1
    2021-12-08 20:47:01.665  INFO 23344 --- [r-client-io-1-1] org.apache.pulsar.client.impl.ClientCnx  : [id: 0x00a610cb, L:/192.168.0.214:61818 ! R:mqe.tuyaeu.com/3.120.66.229:7285] Disconnected
    2021-12-08 20:47:01.665  WARN 23344 --- [r-client-io-1-1] o.a.pulsar.client.impl.ConnectionPool    : [[id: 0x00a610cb, L:/192.168.0.214:61818 ! R:mqe.tuyaeu.com/3.120.66.229:7285]] Connection handshake failed: org.apache.pulsar.client.api.PulsarClientException: Connection already closed
    2021-12-08 20:47:01.770  WARN 23344 --- [al-listener-3-1] o.a.pulsar.client.impl.PulsarClientImpl  : [topic: persistent://593yydhvb5jxeul1klsj/out/event] Could not get connection while getPartitionedTopicMetadata -- Will try again in 100 ms
    2021-12-08 20:47:01.791  INFO 23344 --- [r-client-io-1-1] o.a.pulsar.client.impl.ConnectionPool    : [[id: 0x26369fea, L:/192.168.0.214:61819 - R:mqe.tuyaeu.com/3.120.66.229:7285]] Connected to server
    

    This is what I specified in properties:

    connector.ak=...
    connector.sk=...
    connector.api.base-url=https://openapi-weaz.tuyaeu.com
    connector.region=EU
    

    I double-checked the following:

    • AK and SK are correct: Calling the API using retrofit works
    • The messaging service is enabled and online for the App from the Access Key
    opened by jonasbark 5
  • tuya-spring-boot-starter-sample won't work due to baseUrl == null

    tuya-spring-boot-starter-sample won't work due to baseUrl == null

    I cloned the latest sample (using 1.1.1) and ran it:

    Caused by: java.lang.NullPointerException: baseUrl == null
    	at java.base/java.util.Objects.requireNonNull(Objects.java:246) ~[na:na]
    	at retrofit2.Retrofit$Builder.baseUrl(Retrofit.java:505) ~[retrofit-2.9.0.jar:na]
    

    The only thing I changed is specifying the properties:

    connector.ak=...
    connector.sk=...
    connector.region=EU
    

    It works again when I specify this manually:

    connector.api.base-url=https://openapi-weaz.tuyaeu.com
    
    opened by jonasbark 5
  • bug-report :  Error creating bean with name 'exportProxyInjector' defined ---Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.tuya.connector.spring.export.ExportProxyInjector] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]

    bug-report : Error creating bean with name 'exportProxyInjector' defined ---Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.tuya.connector.spring.export.ExportProxyInjector] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]

    devices: apple M1 jdk: openjdk version "11.0.11" 2021-04-20 LTS pom-jdk: 1.8 描述:使用spring-boot-starter-webflux进行开发的时候, Failed to introspect Class [com.tuya.connector.spring.export.ExportProxyInjector] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]。使用spring-boot-starter-web正常。 spring-boot-starter-parent版本:2.5.1

    log:

    
    2021-06-21 21:24:48.245 ERROR 31829 --- [           main] o.s.boot.SpringApplication               : Application run failed
    
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'exportProxyInjector' defined in class path resource [com/tuya/connector/spring/boot/autoconfigure/ConnectorExportAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.tuya.connector.spring.export.ExportProxyInjector] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:579)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)
    	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:944)
    	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    	at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:64)
    	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
    	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343)
    	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332)
    	at acheng1314.cn.tuyadevices.TuyaDevicesApplicationKt.main(TuyaDevicesApplication.kt:17)
    Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.tuya.connector.spring.export.ExportProxyInjector] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
    	at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:739)
    	at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:671)
    	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:366)
    	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:347)
    	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:295)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1098)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576)
    	... 15 common frames omitted
    Caused by: java.lang.NoClassDefFoundError: Lorg/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping;
    	at java.lang.Class.getDeclaredFields0(Native Method)
    	at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
    	at java.lang.Class.getDeclaredFields(Class.java:1916)
    	at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:734)
    	... 21 common frames omitted
    Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    	... 25 common frames omitted
    
    
    opened by pc859107393 2
  • tuya-connector中的sample中的项目,报PulsarClientException

    tuya-connector中的sample中的项目,报PulsarClientException

    填写了 connector.ak= connector.sk= 和connector.region=CN 项目启动的时候报错,还需要其他配置吗 ** 2022-06-08 09:59:48.744 INFO 9510 --- [r-client-io-1-1] o.a.pulsar.client.impl.ConnectionPool : [[id: 0x28a8fc80, L:/192.168.1.6:55829 - R:mqe.tuyacn.com/121.5.96.165:7285]] Connected to server 2022-06-08 09:59:49.124 WARN 9510 --- [r-client-io-1-1] org.apache.pulsar.client.impl.ClientCnx : [id: 0x28a8fc80, L:/192.168.1.6:55829 - R:mqe.tuyacn.com/121.5.96.165:7285] Received error from server: Failed to authenticate 2022-06-08 09:59:49.125 WARN 9510 --- [r-client-io-1-1] org.apache.pulsar.client.impl.ClientCnx : [id: 0x28a8fc80, L:/192.168.1.6:55829 - R:mqe.tuyacn.com/121.5.96.165:7285] Received unknown request id from server: -1 2022-06-08 09:59:49.129 INFO 9510 --- [r-client-io-1-1] org.apache.pulsar.client.impl.ClientCnx : [id: 0x28a8fc80, L:/192.168.1.6:55829 ! R:mqe.tuyacn.com/121.5.96.165:7285] Disconnected 2022-06-08 09:59:49.132 WARN 9510 --- [r-client-io-1-1] o.a.pulsar.client.impl.ConnectionPool : [[id: 0x28a8fc80, L:/192.168.1.6:55829 ! R:mqe.tuyacn.com/121.5.96.165:7285]] Connection handshake failed: org.apache.pulsar.client.api.PulsarClientException: Connection already closed 2022-06-08 09:59:49.239 WARN 9510 --- [al-listener-3-1] o.a.pulsar.client.impl.PulsarClientImpl : [topic: persistent://cm9vww5******(此处手动打码)pzzfgw/out/event] Could not get connection while getPartitionedTopicMetadata -- Will try again in 100 ms 2022-06-08 09:59:49.275 INFO 9510 --- [r-client-io-1-1] o.a.pulsar.client.impl.ConnectionPool : [[id: 0x28441b2d, L:/192.168.1.6:55830 - R:mqe.tuyacn.com/121.5.96.165:7285]] Connected to server 2022-06-08 09:59:49.377 WARN 9510 --- [r-client-io-1-1] org.apache.pulsar.client.impl.ClientCnx : [id: 0x28441b2d, L:/192.168.1.6:55830 - R:mqe.tuyacn.com/121.5.96.165:7285] Received error from server: Failed to authenticate **

    opened by JaredLees 1
  • TuyaTokenManager怎么注入

    TuyaTokenManager怎么注入

    @Autowired private TuyaTokenManager tokenManager;

    Field tokenManager in cloud.obboiot.tuya.util.TuyaRequestUtil required a bean of type 'com.tuya.connector.open.api.token.TuyaTokenManager' that could not be found.

    opened by YiJiuSmile 0
  • Add compatibility with Spring Boot 3.0

    Add compatibility with Spring Boot 3.0

    This PR adds support for registering auto-configuration classes using META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports, which was added in Spring Boot 2.7 as a replacement for org.springframework.boot.autoconfigure.EnableAutoConfiguration key in META-INF/spring.factories.

    Additionally, Spring Boot 3.0 removed support for discovering auto-configuration classes using META-INF/spring.factories so META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports is required in order for auto-configuration classes to be discovered.

    See here for more details:

    • https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#auto-configuration-registration
    • https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide#auto-configuration-files

    Note that I also opened the equivalent PR in tuya/connector#15.

    opened by vpavic 0
  • 跟mybatis-spring1.3.0冲突

    跟mybatis-spring1.3.0冲突

    Cannot convert value of type 'com.tuya.connector.api.config.Configuration' to required type 'org.apache.ibatis.session.Configuration' for property 'configuration': no matching editors or conversion strategy found

    mybatis-spring版本: org.mybatis mybatis-spring 1.3.0

    opened by Guoyadong 0
  • java.lang.NoClassDefFoundError: retrofit2/Call

    java.lang.NoClassDefFoundError: retrofit2/Call

    您好,我使用1.1.0版本的tuya-spring-boot-starter,调用接口的时候出现Caused by: java.lang.NoClassDefFoundError: retrofit2/Call 导致异常的是retrofit2.Retrofit#validateServiceInterface方法内的service.getDeclaredMethods() 此时service的值是com.xxxxx.ssssss.service.deviceprovider.tuya.ability.api.$DeviceConnector,也就是我定义的涂鸦接口 ,service对象的类加载器为AppClassLoader

    运行环境 JDK11 解压jar后依赖包都在 tuya-spring-boot-starter-1.1.0.jar tuya-api-1.1.0.jar tuya-messaging-1.1.0.jar tuya-common-1.1.0.jar retrofit-2.9.0.jar okhttp-4.9.3.jar okio-jvm-2.8.0.jar gson-2.8.6.jar converter-gson-2.9.0.jar

    请问开发者是否遇到过类似的问题呢?

    com.tuya.connector.api.exceptions.ConnectorException: Error invoke connector. Cause: java.lang.NoClassDefFoundError: retrofit2/Call
    	at com.tuya.connector.api.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:21) ~[connector-api-1.1.1.jar!/:na]
    	at com.tuya.connector.api.core.ConnectorProxy.invoke(ConnectorProxy.java:57) ~[connector-api-1.1.1.jar!/:na]
    	at com.sun.proxy.$Proxy150.getStatusById(Unknown Source) ~[na:na]
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    	at com.tuya.connector.api.plugin.Invocation.proceed(Invocation.java:29) ~[connector-api-1.1.1.jar!/:na]
    	at com.tuya.connector.api.error.ErrorProcessorInterceptor.intercept(ErrorProcessorInterceptor.java:29) ~[connector-api-1.1.1.jar!/:na]
    	at com.tuya.connector.api.plugin.Plugin.invoke(Plugin.java:26) ~[connector-api-1.1.1.jar!/:na]
    	at com.sun.proxy.$Proxy150.getStatusById(Unknown Source) ~[na:na]
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    	at com.tuya.connector.api.plugin.Invocation.proceed(Invocation.java:29) ~[connector-api-1.1.1.jar!/:na]
    	at com.tuya.connector.api.context.ContextInterceptor.intercept(ContextInterceptor.java:30) ~[connector-api-1.1.1.jar!/:na]
    	at com.tuya.connector.api.plugin.Plugin.invoke(Plugin.java:26) ~[connector-api-1.1.1.jar!/:na]
    	at com.sun.proxy.$Proxy150.getStatusById(Unknown Source) ~[na:na]
    	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[na:na]
    	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[na:na]
    	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
    	at java.base/java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:290) ~[na:na]
    	at java.base/java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:746) ~[na:na]
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) ~[na:na]
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) ~[na:na]
    	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) ~[na:na]
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) ~[na:na]
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) ~[na:na]
    Caused by: java.lang.NoClassDefFoundError: retrofit2/Call
    	at java.base/java.lang.Class.getDeclaredMethods0(Native Method) ~[na:na]
    	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166) ~[na:na]
    	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2309) ~[na:na]
    	at retrofit2.Retrofit.validateServiceInterface(Retrofit.java:187) ~[retrofit-2.9.0.jar!/:na]
    	at retrofit2.Retrofit.create(Retrofit.java:141) ~[retrofit-2.9.0.jar!/:na]
    	at com.tuya.connector.api.core.delegate.RetrofitDelegate.<init>(RetrofitDelegate.java:79) ~[connector-api-1.1.1.jar!/:na]
    	at com.tuya.connector.api.core.delegate.DelegateFactory.forRetrofit(DelegateFactory.java:23) ~[connector-api-1.1.1.jar!/:na]
    	at com.tuya.connector.api.core.ConnectorProxy.invoke(ConnectorProxy.java:47) ~[connector-api-1.1.1.jar!/:na]
    	... 28 common frames omitted
    Caused by: java.lang.ClassNotFoundException: retrofit2.Call
    	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]
    	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]
    	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na]
    	... 36 common frames omitted
    
    opened by iszhaojn 2
Owner
Tuya
Tuya
Lattice is a powerful, lightweight business extension invoke framework. By using the Lattice framework, complex business customization can be efficiently organized and managed.

Lattice Framework Introduction Lattice is a powerful, lightweight business extension invoke framework. By using the Lattice framework, complex busines

null 41 Dec 30, 2022
OpenAPI JSON Schema Generator allows auto-generation of API client libraries with a focus on JSON schema given an OpenAPI Spec

OpenAPI JSON Schema Generator IMPORTANT: before the first release, one will need to build the project locally to use the enhancements, bug fixes in th

OpenAPI Tools 5 Dec 31, 2022
循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2,博客Spring系列源码:https://mrbird.cc

Spring 系列教程 该仓库为个人博客https://mrbird.cc中Spring系列源码,包含Spring Boot、Spring Boot & Shiro、Spring Cloud,Spring Boot & Spring Security & Spring Security OAuth2

mrbird 24.8k Jan 6, 2023
This Web Application Allows A user to upload a two minutes Video. It uses Server Side Capabilities of Nodejs and Spring Boot .

VideoStreamingApplication Purpose Of This Application These days trend of short videos are on rise youtube recently realsed "Shorts" . So , taking ins

Prateek Kumar 57 Nov 13, 2022
OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)

OpenAPI Generator Master (5.4.x): 6.0.x (6.0.x): ⭐ ⭐ ⭐ If you would like to contribute, please refer to guidelines and a list of open tasks. ⭐ ⭐ ⭐ ‼️

OpenAPI Tools 14.8k Dec 30, 2022
Critter Chronologer a Software as a Service application that provides a scheduling interface for a small business that takes care of animals

Critter Chronologer a Software as a Service application that provides a scheduling interface for a small business that takes care of animals. This Spring Boot project will allow users to create pets, owners, and employees, and then schedule events for employees to provide services for pets.

Rasha Omran 1 Jan 28, 2022
Cadence is a distributed, scalable, durable, and highly available orchestration engine to execute asynchronous long-running business logic in a scalable and resilient way.

Cadence This repo contains the source code of the Cadence server and other tooling including CLI, schema tools, bench and canary. You can implement yo

Uber Open Source 6.5k Jan 4, 2023
📬Zola (Extremely) Simple Message Queue for spring, It is the simplest Message Queue you've ever experienced.

It is the simplest Message Queue you've ever experienced. home (engish version) korean version docs ?? Getting Started || Overview || Docs ZSMQ ZSMQ (

onigiri 42 Nov 23, 2022
IntelliJ plugin for continuous OpenAPI linting using the Spectral OpenAPI linter

Spectral IntelliJ Plugin This plugin is a wrapper for the tool Spectral, a linter for OpenApi schemas. It supports all Jetbrains IDEs starting at vers

Schwarz IT 19 Jun 6, 2022
该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的线上博客项目/企业大型商城系统/前后端分离实践项目等,摆脱各种 hello world 入门案例的束缚,真正的掌握 Spring Boot 开发。

Spring Boot Projects 该仓库中主要是 Spring Boot 的入门学习教程以及一些常用的 Spring Boot 实战项目教程,包括 Spring Boot 使用的各种示例代码,同时也包括一些实战项目的项目源码和效果展示,实战项目包括基本的 web 开发以及目前大家普遍使用的前

十三 4.5k Dec 30, 2022
A springboot-starter that can achieve Intranet penetration. 一款可以实现内网穿透的springboot-starter。

qynat-springboot-starter 基于netty的内网穿透工具在springboot中的整合 protocol协议:protobuf 只需在application.properties中配置少量信息,实现零代码侵入的web项目内网穿透 项目的server端的源码在另一个多模块项目中,

whz11 65 Dec 12, 2022
A springboot-starter that can achieve Intranet penetration. 一款可以实现内网穿透的springboot-starter。

qynat-springboot-starter 基于netty的内网穿透工具在springboot中的整合 protocol协议:protobuf 只需在application.properties中配置少量信息,实现零代码侵入的web项目内网穿透 项目的server端的源码在另一个多模块项目中,

whz11 65 Dec 12, 2022
Business Application Platform - no-code/low-code platform to build business applications

Orienteer What is Orienteer Orienteer is Business Application Platform: Easy creation of business applications Extendable to fit your needs Dynamic da

Orienteer 189 Dec 6, 2022
A compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.

Flowable (V6) Maven Central: Docker Images: License: Homepage: https://www.flowable.org/ flowable / flowəb(ə)l / a compact and highly efficient workfl

Flowable 6k Jan 7, 2023
一个涵盖六个专栏:Spring Boot 2.X、Spring Cloud、Spring Cloud Alibaba、Dubbo、分布式消息队列、分布式事务的仓库。希望胖友小手一抖,右上角来个 Star,感恩 1024

友情提示:因为提供了 50000+ 行示例代码,所以艿艿默认注释了所有 Maven Module。 胖友可以根据自己的需要,修改 pom.xml 即可。 一个涵盖六个主流技术栈的正经仓库: 《Spring Boot 专栏》 《Spring Cloud Alibaba 专栏》 《Spring Clou

芋道源码 15.7k Dec 31, 2022
Demo microservice architecture with Spring ,Spring Cloud Gateway , Spring Cloud config server , Eureuka , keycloak and Docker.

spring-microservice Demo microservice architecture with Spring ,Spring Cloud Gateway , Spring Cloud config server , Eureuka , keycloak and Docker. Arc

null 4 Sep 13, 2022
Daily mail subscription implementation using Java Spring-boot and Quartz Scheduler

Daily Mail Subscription Service POC Implemented using Java Spring-boot and Quartz Scheduler Working Application Exposing 3 endpoints /subscription/cre

null 16 Jun 3, 2022
An Auction website. Users can Put up items for sale, bid on currently active auctions and write reviews for items that they have won in the auctions.

Auction-Project An Auction website. Users can Put up items for sale, bid on currently active auctions and write reviews for items that they have won i

Nika Salia 3 Sep 7, 2021
The goal of the project is to create a web application using Java EE and database (PostgreSQL) without connecting a modern technology stack like spring boot and hibernate

About The Project SignIn page SignUp page Profile page The goal of the project is to create a web application using Java EE and database (PostgreSQL)

Islam Khabibullin 2 Mar 23, 2022