Build a Full‑Stack Java Admin System Without Front‑End Code Using Erupt

This guide introduces Erupt, a low‑code full‑stack Java framework that lets you create enterprise‑level backend management systems without writing any front‑end code, covering installation, SpringBoot integration, CRUD generation, extended modules like scheduling, code generation, monitoring, NoSQL support, and online API development.

macrozheng
macrozheng
macrozheng
Build a Full‑Stack Java Admin System Without Front‑End Code Using Erupt
A management system usually requires both backend and frontend. Simple CRUD pages can be generated with a code generator. This article recommends the full‑stack framework Erupt for building Java‑only admin systems.

Erupt Overview

Erupt is a low‑code full‑stack framework that uses Java annotations to dynamically generate pages, CRUD operations, permission control, and other backend features. It requires zero front‑end code, automatic table creation, and only a single class file with concise annotation configuration to rapidly develop enterprise‑level backend management systems.

Basic Usage

We start with a practical example of product brand management to get familiar with Erupt combined with SpringBoot.

SpringBoot Integration

Erupt natively supports SpringBoot, making integration very convenient.

Add the Erupt version property to pom.xml:

<properties>
    <erupt.version>1.6.13</erupt.version>
</properties>

Add the following dependencies to pom.xml:

<dependencies>
    <!-- User permission management -->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-upms</artifactId>
        <version>${erupt.version}</version>
    </dependency>
    <!-- Interface data security -->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-security</artifactId>
        <version>${erupt.version}</version>
    </dependency>
    <!-- Backend web UI -->
    <dependency>
        <groupId>xyz.erupt</groupId>
        <artifactId>erupt-web</artifactId>
        <version>${erupt.version}</version>
    </dependency>
    <!-- MySQL driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
</dependencies>

Configure data source and JPA in application.yml:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/erupt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
  jpa:
    show-sql: true
    generate-ddl: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: mysql

Create the required configuration files under resources (image omitted).

Add the Java configuration class EruptConfig in the same package as the main class MallTinyApplication to set the scan paths:

@Configuration
@ComponentScan({"xyz.erupt","com.macro.mall.tiny"})
@EntityScan({"xyz.erupt","com.macro.mall.tiny"})
@EruptScan({"xyz.erupt","com.macro.mall.tiny"})
public class EruptConfig {
}

Create the MySQL database erupt. When the project starts, the required tables are automatically created.

After successful startup, access the login page (default credentials erupt:erupt) at http://localhost:8080/. The system provides complete permission and dictionary management without any front‑end code.

Implement Single‑Table CRUD

Use the core annotations @Erupt and @EruptField to define an entity class and quickly achieve CRUD operations.

Create the entity class PmsBrand (no Controller, Service, or DAO needed):

@Erupt(name = "商品品牌")
@Table(name = "pms_brand")
@Entity
public class PmsBrand {
    @Id
    @GeneratedValue(generator = "generator")
    @GenericGenerator(name = "generator", strategy = "native")
    @Column(name = "id")
    @EruptField
    private Long id;

    @EruptField(
        views = @View(title = "品牌名称"),
        edit = @Edit(title = "品牌名称", notNull = true, search = @Search(vague = true))
    )
    private String name;

    @EruptField(
        views = @View(title = "品牌首字母"),
        edit = @Edit(title = "品牌首字母", notNull = true)
    )
    private String firstLetter;

    @EruptField(
        views = @View(title = "品牌LOGO"),
        edit = @Edit(title = "品牌LOGO", type = EditType.ATTACHMENT,
            attachmentType = @AttachmentType(type = AttachmentType.Type.IMAGE))
    )
    private String logo;

    // other fields omitted for brevity
}

After creating the entity, restart the project and add a top‑level menu "商品" and a sub‑menu "品牌管理" (type set to the entity class name PmsBrand) via the menu maintenance UI.

Refresh the page; the full brand management interface appears. Adding a new brand works out of the box, and the list view shows fields rendered according to the @Edit annotation (text boxes, image upload, switches, etc.).

Core Annotation Explanation

Refer to the PmsBrand code to learn the following core annotations.

@Erupt

name : Function name

desc : Function description

@EruptField

views : Table display configuration

edit : Edit field configuration

sort : Front‑end display order (smaller numbers appear first)

@View

title : Column name

desc : Column description

type : Data display type (default AUTO)

show : Visibility flag

@Edit

title : Column name

desc : Column description

type : Edit type (default AUTO)

show : Visibility flag

notNull : Required field flag

search : Search support; @Search(vague = true) enables fuzzy search.

Extended Modules

Erupt also provides many useful system functions such as scheduled tasks, code generators, system monitoring, and NoSQL support.

Scheduled Tasks (erupt‑job)

Add the erupt-job dependency to pom.xml:

<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-job</artifactId>
    <version>${erupt.version}</version>
</dependency>

Configure mail settings in application.yml to avoid startup errors.

spring:
  mail:
    username: [email protected]
    password: 123456
    host: smtp.exmail.qq.com
    port: 465
    properties:
      mail.smtp.ssl.auth: true
      mail.smtp.ssl.enable: true
      mail.smtp.ssl.required: true

Create a job handler class:

@Service
@Slf4j
public class JobHandlerImpl implements EruptJobHandler {
    @Override
    public String exec(String code, String param) throws Exception {
        log.info("Scheduled task executed, code:{}, param:{}", code, param);
        return "success";
    }
}

After restarting, add a task via the "任务维护" UI to run every 5 seconds, then view execution logs.

Code Generator (erupt‑generator)

Add the erupt-generator dependency to pom.xml:

<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-generator</artifactId>
    <version>${erupt.version}</version>
</dependency>

In the "代码生成" menu you can add tables and fields like in Navicat, then generate entity class code with a click.

System Monitoring (erupt‑monitor)

Add the erupt-monitor dependency to pom.xml:

<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-monitor</artifactId>
    <version>${erupt.version}</version>
</dependency>

Configure Redis in application.yml and enable Redis session storage.

spring:
  redis:
    host: localhost
    database: 1
    port: 6379
    password: 123456
    timeout: 3000ms
erupt:
  redisSession: true

Use the "服务监控", "缓存监控", and "在线用户" menus to view server metrics, Redis statistics, and active sessions.

NoSQL Data Source (erupt‑mongodb)

Add the erupt-mongodb dependency to pom.xml:

<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-mongodb</artifactId>
    <version>${erupt.version}</version>
</dependency>

Configure MongoDB in application.yml:

spring:
  data:
    mongodb:
      host: localhost
      port: 27017
      database: erupt

Define an entity class using @EruptDataProcessor and @Document to store data in MongoDB:

@EruptDataProcessor(EruptMongodbImpl.MONGODB_PROCESS)
@Document(collection = "product")
@Erupt(name = "商品管理", orderBy = "sort")
public class PmsProduct {
    @Id
    @EruptField
    private String id;

    @EruptField(
        views = @View(title = "商品名称", sortable = true),
        edit = @Edit(title = "商品名称", search = @Search(vague = true))
    )
    private String name;

    // other fields omitted for brevity
}

Add a "商品管理" menu via the UI; the feature becomes available after a refresh.

Online API Development (erupt‑magic‑api)

Add the erupt-magic-api dependency to pom.xml:

<dependency>
    <groupId>xyz.erupt</groupId>
    <artifactId>erupt-magic-api</artifactId>
    <version>${erupt.version}</version>
</dependency>

Configure the magic‑api path in application.yml:

erupt:
  jacksonHttpMessageConvertersPackages:
    - org.ssssssss
magic-api:
  web: /magic/web
  resource.location: D:/erupt/magic-script

Create a script to query all brands:

var sql = "select * from pms_brand";
return db.select(sql);

Add the script via the "接口配置" menu; the endpoint is generated automatically and can be accessed directly in a browser.

Conclusion

If you need a simple backend management system, Erupt is an excellent choice that eliminates front‑end development. For complex UI requirements or intricate business logic, a custom front‑end implementation may still be necessary.

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.

JavaBackend DevelopmentspringbootCRUDNoSQLEruptLow‑code
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.