docusaurus 部署到 GitHub Pages 自定义域名

在 iCloud Drive 下创建目录 docusaurus, 命令行进入 docusaurus

npm init docusaurus@latest

What should we name this site? docs-test
…默认选择向下执行

托管 github

新建仓库 docs-test

git init
git add .
git commit -m 'project int'
git remote add origin https://github.com/jkxyx205/docs-test.git
git push -u origin main
  • 开启 github pages
    docs-test/Settings/Pages/, Source 设置 Github Actions
  • 创建部署文件.github/workflows/deploy.yml
    提示词:「docusaurus 自动部署到 GitHub Pages, 写一下部署的yml」,下面的配置是通过 Claude 3.5 sonnet 生成的
name: Deploy Docusaurus to GitHub Pages

on:
  push:
    branches: ["main"]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '18'
          cache: npm

      - name: Install dependencies
        run: npm ci

      - name: Build website
        run: npm run build

      - name: Setup Pages
        uses: actions/configure-pages@v4

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: build

      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

提交 push ,如果成功部署可以访问: https://jkxyx205.github.io/docs-test/

绑定域名

  • 添加域名解析docs-test CNAME jkxyx205.github.io
  • docs-test/Settings/Pages/Custom domain 填写域名 docs-test.xxx.com 并保存
  • Enforce HTTPS 勾选,http 会自动跳转到 https

SpringBoot application.yml 配置参数,不上传到GitHub

需求:

application.yml 配置的数据库信息采用变量的形式,这样提交到GitHub的时候就不会泄露敏感信息

  • 项目目录下添加.env配置信息
URL=jdbc:postgresql://localhost:5432/postgres
USERNAME=root
PASSWORD=123456
  • application.yml导入 .env
spring:
    config:
        import:
        - optional:file:.env[.properties]
  • application.yml 使用变量
datasource:
    url: ${URL}
    username: ${USERNAME}
    password: ${PASSWORD}
  • java 代码使用变量
@Value("${USERNAME}")
private String username;

@Value("${spring.datasource.username}")
private String username2;

@Value("${PASSWORD}")
private String password;
  • .gitignore 忽略 .env
.env*

SpringBoot 集成 sharp-database

添加依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.9</version>
    <relativePath/>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.24</version>
    </dependency>

    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
    </dependency>

    <dependency>
        <groupId>com.rick.db</groupId>
        <artifactId>sharp-database</artifactId>
        <version>2.0-SNAPSHOT</version>
    </dependency>
</dependencies>

数据库配置文件:

server:
  port: 8080
spring:
  datasource:
    name: druidDataSource
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
      username: root
      password: root
      initialSize: 1
      minIdle: 5
      maxActive: 10
      maxWait: 60000

sharp:
  database: # 多个包扫描用 , 隔开
    entity-base-package: com.rick.sharp.**.entity

测试

@SpringBootApplication
@DependsOn("entityDAOSupport")
@EnableScheduling
public class DemoApplication {

    @Autowired
    private EntityDAO<User, Long> userDAO;

    @Autowired
    private EntityDAO<CodeDescription, Long> codeDescriptionDAO;


    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);

        String ss = JsonUtils.toJson("ss");
        System.out.println(ss);
        System.out.println("running.....");
    }

    @Scheduled(fixedRate = 5000)
    public void find() {
        User user = userDAO.selectById(1L).get();
        System.out.println(user.getName());

        codeDescriptionDAO.insert(CodeDescription.builder()
                        .code("test-" + System.currentTimeMillis())
                        .description("hello")
                .category(CodeDescription.CategoryEnum.MATERIAL)
                .build());
    }

}

@Sql 根据对象的字段查询其他信息

假设对象有属性 物料id,联系人id,可以根据这个两个 id 分别获取 描述信息,并放到Map对象中。

将多行的 union all 进行「行转列」

select 
MAX(CASE WHEN c1 = 'material_name' THEN c2 END) as 'material_name',
MAX(CASE WHEN c1 = 'contact_person' THEN c2 END) as 'contact_person'
from (
select 'material_name' c1, name c2 from mm_material where id = 725446412870901760
union all
select 'contact_person', contact_person from core_contact where id = 738365393630253056)
t

创建查询对象 GridQuery.java

@Data
@Table
public class GridQuery {

    /**
     * 必须有一个主键字段
     */
    private Long id;

    private Long materialId;

    private Long contactId;

    @Transient
    @Sql(value = "select \n" +
            "MAX(CASE WHEN c1 = 'material_name' THEN c2 END) as 'material_name',\n" +
            "MAX(CASE WHEN c1 = 'contact_person' THEN c2 END) as 'contact_person'\n" +
            "from (\n" +
            "select 'material_name' c1, name c2 from mm_material where id = :materialId\n" 
            "union all\n" +
            "select 'contact_person', contact_person from core_contact where id = :contactId)\n" +
            "t", params="materialId@materialId, contactId@contactId")
    private Map<String, Object> additionalInfo;
}

测试信息

@Autowired
private EntityDAOSupport entityDAOSupport;

@Test
public void testQuery() {
    // 单个对象
    GridQuery query = new GridQuery();

    query.setMaterialId(725446412870901760L);
    query.setContactId(738365393630253056L);

    GridQuery query1 = entityDAOSupport.query(query);

    System.out.println(query1);

    // 对象数组
    GridQuery query2 = new GridQuery();
    query2.setMaterialId(725446412870901760L);

    GridQuery query3 = new GridQuery();
    query3.setContactId(738365393630253056L);

    List<GridQuery> query4 = entityDAOSupport.query(Arrays.asList(query2, query3));
}