Build a Full‑Featured Backend Admin System in Minutes with Erupt

This article walks you through setting up the Erupt Java annotation‑based framework, configuring Maven dependencies and datasource, launching a ready‑made admin UI, customizing pages with @Erupt annotations, and extending functionality via data proxies, all without writing front‑end code.

macrozheng
macrozheng
macrozheng
Build a Full‑Featured Backend Admin System in Minutes with Erupt

I recently encountered a new project that uses the Erupt framework, which fulfills my early‑career dream of rapid backend development, so I’m sharing the experience.

Erupt is a generic backend‑admin framework that boasts ultra‑low code, zero front‑end code, zero CRUD operations, no table creation, and pure Java annotation development, claiming you can build a complete admin system in about three minutes.

To get started, ensure you have Java 1.8+ and Spring Boot 2.0+. Add the following dependencies to your pom.xml:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <!-- User permission management -->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-upms</artifactId>
        <version>1.6.7</version>
    </dependency>
    <!-- Security -->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-security</artifactId>
        <version>1.6.7</version>
    </dependency>
    <!-- Web UI -->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-web</artifactId>
        <version>1.6.7</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>compile</scope>
    </dependency>
</dependencies>

Create an application.yml file with a simple datasource configuration (prepare a MySQL database beforehand):

spring:
  datasource:
    url: jdbc:mysql://47.93.6.5:3306/erupt2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
  jpa:
    show-sql: true
    generate-ddl: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: mysql
  profiles:
    active: dev
  mail:
    username: [email protected]
    password: xxxxxxx
    host: smtp.qq.com
    properties:
      mail.smtp.ssl.auth: true
      mail.smtp.ssl.enable: true
      mail.smtp.ssl.required: true
server:
  port: 8888

When you start the application, Erupt uses JPA to automatically create system tables and insert initial data. The pre‑created tables are generated only on the first launch; to recreate them, delete the hidden .Erupt file in the project workspace (its location can be obtained via System.getProperty("user.dir")).

Among the 16 system tables, e_upms_user stores the default admin user with username and password both set to erupt. Access the login page at http://127.0.0.1:8888/ and log in with these credentials to see a fully functional backend UI.

To add custom pages, define an entity class annotated with @Erupt and @EruptField. The core annotations include: @Erupt – marks a class as a page definition. @EruptField – marks a field to be displayed on the page. @Power – controls button permissions (add, delete, edit, import, export, etc.). @Search – marks a field as searchable. @Table – specifies the underlying database table (optional).

Example Student entity:

@Getter
@Setter
@Erupt(name = "学生表", power = @Power(importable = true, export = true))
@Entity
public class Student extends BaseModel {

    @EruptField(
        views = @View(title = "学生姓名"),
        edit = @Edit(title = "学生姓名", notNull = true, search = @Search(vague = true))
    )
    private String studentName;

    @EruptField(
        views = @View(title = "所属班级"),
        edit = @Edit(title = "所属班级", notNull = true)
    )
    private String studentClass;

    @EruptField(
        views = @View(title = "学生年龄"),
        edit = @Edit(title = "学生年龄", notNull = true)
    )
    private String studentAge;

    @Lob
    @EruptField(
        views = @View(title = "学生性别"),
        edit = @Edit(title = "学生性别", notNull = true)
    )
    private String studentSex;

    @EruptField(
        views = @View(title = "考核状态"),
        edit = @Edit(title = "考核状态", notNull = true, boolType = @BoolType(trueText = "通过", falseText = "挂科"), search = @Search)
    )
    private Boolean status;
}

After defining the class, create a menu entry in the Erupt menu management, setting the type value to the class name ( Student) so the page appears in the UI.

Adding a student record automatically creates a corresponding row in the Student table, with all persistence handled by the framework.

Erupt also supports data proxies for custom business logic. For example, to prevent adding a student named “张三”:

@Getter
@Setter
@Erupt(name = "学生表", dataProxy = {StudentDataProxy.class}, power = @Power(importable = true, export = true))
@Entity
public class Student extends BaseModel {}

public class StudentDataProxy implements DataProxy<Student> {
    @Override
    public void beforeAdd(Student student) {
        if ("张三".equals(student.getStudentName())) {
            throw new EruptApiErrorTip("名称禁止为张三!");
        }
    }
    @Override public void afterAdd(Student student) {}
    @Override public void afterUpdate(Student student) {}
    @Override public void afterDelete(Student student) {}
}

Erupt provides a code generator that can produce Java classes and fields based on your specifications, allowing you to copy the generated code directly.

Beyond basic CRUD, Erupt offers many built‑in features such as task scheduling, multi‑table joins, front‑end‑back‑end separation deployment, API permission control, operation logging, multiple data sources, email system, and blacklist/whitelist management, all accessible via simple API calls.

In summary, Erupt is a fast, efficient, and beginner‑friendly low‑code backend solution. While it may not suit highly complex, heavily customized enterprise systems and its community is relatively small, it works well for configuration‑driven data management tasks.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

JavaLow-codeSpring BootAnnotationjpaEruptBackend Admin
macrozheng
Written by

macrozheng

Dedicated to Java tech sharing and dissecting top open-source projects. Topics include Spring Boot, Spring Cloud, Docker, Kubernetes and more. Author’s GitHub project “mall” has 50K+ stars.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.